2

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

  1. 多维数组
  2. 命名列
  3. 不同的列包含不同的数据类型(因此 col 1 中的所有内容都是字符串,但 col 2 都是 Decimal 等)

我目前正在使用 numpy ndarrays 在每列中存储不同类型的数据。我已经初始化了数组,以便它可以存储多种数据类型:

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

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

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

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

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.
4

1 回答 1

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.

于 2012-11-15T23:02:33.747 回答