2

コード

np.array([100,200,300],dtype=str)

戻り値:

array(['1', '2', '3'], 
      dtype='|S1')

ドキュメントには次のように記載されています。

dtype : データ型、オプション

配列に必要なデータ型。指定されていない場合、型は、オブジェクトをシーケンスに保持するために必要な最小型として決定されます。

これはバグですか?

4

2 に答える 2

2

私はまだ質問を見つけることができませんが、それを回避するには:

>>> a=[100,200,300]

>>> np.char.mod('%d', a)
array(['100', '200', '300'],
      dtype='|S3')

これはあなたの問題を回避します:

>>> a=[100,200,3005]
>>> np.char.mod('%d', a)
array(['100', '200', '3005'],
      dtype='|S4')

不明瞭なドキュメント。これは、 を選択するよりも約 4 倍遅くなりますが、メソッドdtype="S.."を使用するよりも非線形的に高速であることに注意してください。np.array(map(str,a))

また、いくつかのきちんとしたこともできます。

>>> a
[1234.5, 123.4, 12345]

>>> np.char.mod('%s',a)
array(['1234.5', '123.4', '12345.0'],
      dtype='|S7')

>>> np.char.mod('%f',a)
array(['1234.500000', '123.400000', '12345.000000'],
      dtype='|S12')

>>> np.char.mod('%d',a) #Note the truncation of decimals here.
array(['1234', '123', '12345'],
      dtype='|S5')

>>> np.char.mod('%s.stuff',a)
array(['1234.5.stuff', '123.4.stuff', '12345.0.stuff'],
      dtype='|S13')

追加情報については、こちらを参照してください。

于 2013-08-29T18:46:50.410 に答える
1

この動作が見られる理由は、次のように各文字列要素のサイズを指定する必要があるためです。

>>> np.array([100,200,300],dtype='S3')
      array(['100', '200', '300'], 
             dtype='|S3')

それ以外の場合、各要素文字列のサイズはデフォルトで 1 になります。

詳細はこちら: Numpy conversion array to float to strings

于 2013-08-29T18:46:53.137 に答える