2017-07-10 4 views
0

Ich möchte eine Liste von Zeichenfolgen zu einem Array-Element zusammen, aber ich bekomme einen seltsamen Kürzungsfehler. Dies funktioniert:String-Arrays wird unerwartet abgeschnitten (Python 3.5)

>>> x = ' '.join(np.array(['water','road','agriculture','habitation'])) 
>>> print(x) 
'water road agriculture habitation' 

Ich brauche dies von 60000 + Objekte für ein Array zu tun, aber sobald ich die Enden der langen Strings erhalten abgeschnitten einer for-Schleife hinzufügen. Hier ist eine vereinfachte Version:

>>> y = np.zeros([3,2]).astype(str) 
>>> y[:,0] = ['image_1','image_2','image_3'] 
>>> for i in range(3): 
... z = np.array(['water','road','agriculture','habitation']) 
... y[i,1] = ' '.join(z) 
>>> print(y) 
[['image_1' 'water road agriculture habitatio'] 
['image_2' 'water road agriculture habitatio'] 
['image_3' 'water road agriculture habitatio']] 

Ich bin ratlos, was das verursacht. Irgendwelche Vorschläge?

Antwort

0

str ist kein NumPy-Typ und passt nicht wirklich in das NumPy-Typensystem, da es eine beliebige Länge hat. Ich kann nicht finden, wo dies tatsächlich dokumentiert ist, aber was Sie erhalten, wenn Sie diesen Typ anfordern, ist eigentlich 'S32' - jedes Element erhält genau 32 Zeichen des zugewiesenen Speicherplatzes, alles darüber hinaus ist verloren.

Sie könnten explizit einen längeren String-Typ verwenden, 'S40' vielleicht, um die längste Zeichenfolge zu halten, die Sie benötigen - aber dies wird viel Speicher verschwenden, wenn die durchschnittliche String-Länge viel weniger als das Maximum ist. Es kann besser sein, einen Typ object (oder 'O') zu verwenden, damit die Arrays Verweise auf normale Python-Objekte enthalten - Ihre Strings verhalten sich wie normal.

+0

Danke! Beide Lösungen funktionierten, aber gingen mit der Objekttyp-Lösung. – mihaly