在具有相同柔性类型的两个ndarray上操作会产生意外结果

时间:2017-11-21 17:30:39

标签: python numpy

考虑使用灵活类型的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进行操作但是有更简单的方法吗?

0 个答案:

没有答案