我需要一个高效的异构数组,其中第一个元素是int,其余的是浮点数。然而,在创建它之后,基本的数组操作正在爆炸。
A = np.zeros(1, dtype='i4, f4, f4')
B = np.array([3,3,3])
A + B
TypeError: invalid type promotion
答案 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')]) ....
添加到int
,int
添加到float
,但不能添加{{1}元素到另一个元素。
int
的元素是A
或A
(取决于您如何访问它)
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,并对其执行常规数学运算。但是,如果你使用浮子和整数混合,这是不可能的。