gpt4 book ai didi

python - 异构 numpy 数组上的数组操作

转载 作者:行者123 更新时间:2023-11-30 22:56:24 25 4
gpt4 key购买 nike

我需要一个高效的异构数组,其中第一个元素是 int,其余是 float。然而,创建它之后,基本的数组操作就会呈爆炸式增长。

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

最佳答案

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

即使将 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 添加到 int >,但不是将 A 元素添加到另一个元素的方法。

A 的元素是一个 tuplenumpy.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

要跨结构化数组的字段进行操作,您通常必须迭代字段名称。

In [493]: B=np.arange(3)

In [494]: for i,name in enumerate(A.dtype.names):
A[name] = A[name]+B[i]
.....:

In [495]: A
Out[495]:
array([(0, 1.0, 2.0)],
dtype=[('f0', '<i4'), ('f1', '<f4'), ('f2', '<f4')])

如果所有字段具有相同的类型,例如dtype='i4, i4, i4',那么就可以将结构化数组视为同构 dtype,并对其执行常规数学运算。但对于 float 和整数的混合,这是不可能的。

关于python - 异构 numpy 数组上的数组操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37008304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com