используя сумму в массиве гибких типов - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть гибкий массив типов, такой, что первый столбец - это номер узла, а следующие три - трехмерные координаты, подобные этой 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')])

Теперь я хотел бы получить вектор, который является суммой каждого столбца для 'x', 'y' и 'z'. Наивно это было бы что-то вроде: 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')])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...