考虑使用灵活类型的numpy ndarray的(最小)示例:
import numpy as np
dt = np.dtype([('f1', np.uint8), ('f2', np.int8)])
# dtype([('f1', 'u1'), ('f2', 'i1')])
data1 = np.fromstring(b'\x00\x01', dtype=dt)
# array([(0, 1)],
# dtype=[('f1', 'u1'), ('f2', 'i1')])
data2 = np.fromstring(b'\xE0\xE1', dtype=dt)
# array([(224, -31)],
# dtype=[('f1', 'u1'), ('f2', 'i1')])
在这样的数组上进行元素运算的最简单方法是什么?
常见操作几乎没有产生意外结果。
减法:
>>> data2 - data1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for -: 'numpy.ndarray' and 'numpy.ndarray'
预期:
array([(224, -32)],
dtype=[('f1', 'u1'), ('f2', 'i1')])
布尔运算:
>>> data2 > 1
True
预期:
array([(True, False)],
dtype=[('f1', 'bool'), ('f2', 'bool')])
我知道我可以显式迭代dt.fields
(可能是递归的嵌套灵活类型),并对单个同质ndarray进行操作但是有更简单的方法吗?