2017-07-10 2 views
0

文字列のリストをまとめて1つの配列要素にまとめたいのですが、切り捨てエラーが発生しています。予期せず文字列が切り捨てられています(Python 3.5)

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

私は60000+オブジェクトの配列のためにこれを実行する必要がありますが、できるだけ早く私はforループを追加すると、長い文字列の両端を切断します:これは動作します。ここに簡略化したバージョンがあります:

>>> 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']] 

私はこれを引き起こしているために迷っています。助言がありますか?

答えて

0

strは、NumPyタイプではなく、任意の長さであるため、NumPyのタイプシステムに実際には適合しません。私はこれが実際に文書化されている場所を見つけることができませんが、このタイプをリクエストしたときに得られるものは実際には'S32'です - 各要素には正確に32文字のスペースが割り当てられ、それ以外のものは失われます。

長い文字列型の文字列を使用すると、必要な長さの文字列を保持することができますが、平均文字列の長さが最大文字列の長さよりもはるかに小さい場合は、メモリが大量に消費されます。 object(または'O')の型を使用するほうが良いかもしれません。そのため、配列は普通のPythonオブジェクトへの参照を保持します。つまり、文字列は通常どおりに動作します。

+0

ありがとうございます!どちらのソリューションも機能しましたが、オブジェクトタイプのソリューションを使用しました。 – mihaly

関連する問題