python - 使用命名列(和数据类型)初始化一个空数组

时间:2012-11-15 22:08:23

标签: python multidimensional-array numpy named-constructor

我有三个限制,并且像往常一样,我只能弄清楚如何同时满足其中任何两个:

  1. 多维数组
  2. 命名列
  3. 不同的列包含不同的数据类型(因此col 1中的所有内容都是字符串,但col 2都是Decimal等)。
  4. 我目前正在使用numpy ndarrays来存储每列中不同类型的数据。我已初始化数组,因此它可以存储多种数据类型:

    norm = numpy.empty((79, len(header)), dtype=numpy.object)
    

    我一直在使用标题(字符串名称列表)作为列名的代理(然后查找标题中值的索引),但这看起来真的很笨拙。

    我环顾四周,但据我所知,当您使用列名(和类型)初始化数组时,必须使用值填充数组,如:Store NumPy Row and Column Headers < / p>

    因为当我尝试这样的事情时:

    n=numpy.empty((5,2), dtype=[("sub", "str"), ("words", Decimal)])
    n[0] = ['06', Decimal(10)]
    

    我收到此错误:

    Traceback (most recent call last):
    File "<string>", line 1, in <fragment>
    ValueError: Setting void-array with object members using buffer.
    

1 个答案:

答案 0 :(得分:2)

试试这个:

>>> n = numpy.empty((5,2), dtype=[("sub", "S10"), ("words", Decimal)])
>>> n[0] = ('06', Decimal(10))
>>> print n
[[('06', Decimal('10')) ('06', Decimal('10'))]
 [('', None) ('', None)]
 [('', None) ('', None)]
 [('', None) ('', None)]
 [('', None) ('', None)]]

正如@seberg所提到的,你想要设置一个元组而不是一个列表。您还需要指定要存储在“sub”中的字符串的长度。 Numpy结构化数组不存储任意长度的字符串,您需要选择最大长度。如果您真的无法选择最大长度,请使用object代替str