4

私は次のようなデータ構造を持っています:

data = [ ('a', 1.0, 2.0),
         ('b', 2.0, 4.0),
         ('c', 3.0, 6.0) ]

numpyを使用して構造化配列に変換したいと思います。ただし、次のことを試してみると、フロートは保持されますが、文字列情報が失われます。

import numpy
x = numpy.array(data, dtype=[('label', str), ('x', float), ('y', float)])
print x

その結果:

>>> [('', 1.0, 2.0) ('', 2.0, 4.0) ('', 3.0, 6.0)]

なぜこれが起こるのか、そして文字列情報をどのように保持するのかを誰かが説明できますか?

4

1 に答える 1

4

配列を印刷して注意深く見ると、問題がわかります。

>>> numpy.array(data, dtype=[('label', str), ('x', float), ('y', float)])
array([('', 1.0, 2.0), ('', 2.0, 4.0), ('', 3.0, 6.0)], 
      dtype=[('label', '|S0'), ('x', '<f8'), ('y', '<f8')])

最初のフィールドのデータ型は'|S0'-ゼロ幅の文字列フィールドです。文字列フィールドを長くします-これが2文字の文字列フィールドです:

>>> numpy.array(data, dtype=[('label', 'S2'), ('x', float), ('y', float)])
array([('a', 1.0, 2.0), ('b', 2.0, 4.0), ('c', 3.0, 6.0)], 
      dtype=[('label', '|S2'), ('x', '<f8'), ('y', '<f8')])

ここに記載されているように、この方法でも実行できます。

>>> numpy.array(data, dtype=[('label', (str, 2)), ('x', float), ('y', float)])
array([('a', 1.0, 2.0), ('b', 2.0, 4.0), ('c', 3.0, 6.0)], 
      dtype=[('label', '|S2'), ('x', '<f8'), ('y', '<f8')])
于 2012-10-13T14:26:53.870 に答える