异构numpy数组上的数组操作

时间:2016-05-03 15:28:55

标签: python arrays numpy

我需要一个高效的异构数组,其中第一个元素是int,其余的是浮点数。然而,在创建它之后,基本的数组操作正在爆炸。

A = np.zeros(1, dtype='i4, f4, f4')
B = np.array([3,3,3])
A + B
TypeError: invalid type promotion

1 个答案:

答案 0 :(得分:3)

对于像这样的结构化数组,调用字段迭代的操作通常不起作用。

即使向自身添加&也不起作用:

A

换句话说,有一种方法可以将In [476]: A = np.zeros(1, dtype='i4, f4, f4') In [477]: A+A ... TypeError: ufunc 'add' did not contain a loop with signature matching types dtype([('f0', '<i4'), ('f1', '<f4'), ('f2', '<f4')]) .... 添加到intint添加到float,但不能添加{{1}元素到另一个元素。

int的元素是AA(取决于您如何访问它)

tuple

要跨结构化数组的字段工作,通常必须遍历字段名称。

numpy.void

如果所有字段都具有相同的类型,例如In [478]: A.item() Out[478]: (0, 0.0, 0.0) In [479]: type(A.item()) Out[479]: tuple In [480]: type(A[0]) Out[480]: numpy.void ,然后可以将结构化数组视为同类dtype,并对其执行常规数学运算。但是,如果你使用浮子和整数混合,这是不可能的。