在柔性类型数组中使用sum

时间:2018-04-26 15:57:24

标签: python arrays numpy

我有一个灵活的类型数组,第一列是节点编号,接下来的三个是3D坐标,如M=np.array([(0,1.1,2.1,3.1),(1,4,5,6),(2,10,11,12)],dtype=[('N','i4'),('x','f8'),('y','f8'),('z','f8')])

>>> array([(0,  1.1,  2.1,  3.1), 
           (1,  4. ,  5. ,  6. ),
           (2, 10. , 11. , 12. )],
           dtype=[('N', '<i4'), ('x', '<f8'), ('y', '<f8'), ('z', '<f8')])

现在我想得到一个向量,它是&#39; x&#39;,&#39; y&#39;的每一列的总和。和&#39; z&#39;。天真地类似于:M[['x','y','z']].sum(),但会出现错误:TypeError: cannot perform reduce with flexible type

我的实际例子稍微复杂一点,因为我有一个带节点的元素列表:E=np.array([[0,1],[1,2]])我想要的是每个元素的节点坐标之和。我可以针对每个维度执行此操作:M[E]['x'].sum(axis=0),其中包含array([5.1,14])

有没有办法在同一类型的所有维度上进行,以便最终得到与M=np.array([(5.1,7.1,9.1),(14,16,18),],dtype=[('x','f8'),('y','f8'),('z','f8')])相同的结果,即

array([( 5.1,  7.1,  9.1), 
       (14. , 16. , 18. )],
       dtype=[('x', '<f8'), ('y', '<f8'), ('z', '<f8')])

0 个答案:

没有答案