无法减去结构化numpy数组中的特定字段

时间:2016-08-02 14:06:53

标签: python arrays python-2.7 numpy

尝试减去结构化numpy数组中的字段时,会发生以下错误:

In [8]: print serPos['pos'] - hisPos['pos']
--------------------------------------------------------------------------- 
TypeError                                 
Traceback (most recent call last) <ipython-input-8-8a22559cfb2d> in <module>()
----> 1 print serPos['pos'] - hisPos['pos']

TypeError: ufunc 'subtract' did not contain a loop with signature matching types 
dtype([('x', '<f8'), ('y', '<f8'), ('z', '<f8')]) 
dtype([('x', '<f8'), ('y', '<f8'), ('z', '<f8')]) 
dtype([('x', '<f8'), ('y', '<f8'), ('z', '<f8')])

鉴于标准浮动dtype,为什么我无法执行此减法?

要重现这些条件,请提供以下示例代码:

import numpy as np

raw = np.dtype([('residue', int),
    ('pos', [('x', float),
    ('y', float),
    ('z', float)])])

serPos = np.empty([0,2],dtype=raw)
hisPos = np.empty([0,2],dtype=raw)

serPos = np.append(serPos, np.array([(1,(1,2,3))], dtype=raw))
hisPos = np.append(hisPos, np.array([(1,(1,2,3))], dtype=raw))

print serPos['pos'], hisPos['pos']  # prints fine
print serPos['pos'] - hisPos['pos'] # errors with ufunc error

任何建议都将不胜感激!

1 个答案:

答案 0 :(得分:1)

dtype的{​​{1}}是复合

serPos['pos']

还没有为化合物dtype定义减法(和其他此类操作)。它对dtype([('x', '<f8'), ('y', '<f8'), ('z', '<f8')]) dtype也不起作用。

您可以减去单个字段

raw

我认为我们也可以serPos['pos']['x']-hisPos['pos']['x'] view作为二维数组(3列)并减去该形式。但我需要测试语法。

serPos['pos']

应生成serPos['pos'].view((float,(3,))) 2d数组。