Сумма списка NumPy массивов без суммирования координат, если список размером 1 - PullRequest
0 голосов
/ 04 февраля 2020

Если у меня есть список numpy массивов и я хочу добавить их по координатам: np.sum() выполняет свою работу.

sum([np.array([1, 2, 3]), np.array([6, 5, 4])])
>>> array([7, 7, 7])

Но если мой список содержит только один массив, Происходит новая (и нежелательная) вещь:

sum([np.array([1, 2, 3])])
>>> 6

Итак, как мне сделать так, чтобы поведение было согласованным для всех размеров списка ? т.е. мне нужна функция f() такая, что:

f([np.array([1, 2, 3]), np.array([6, 5, 4])])
>>> array([7, 7, 7])
f([np.array([1, 2, 3])])
>>> array([1, 2, 3])

Я исключаю if len(lst) > 1: решения типа.

Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 04 февраля 2020

Numpy массивы могут быть суммированы по произвольному измерению. Сначала вам нужно преобразовать это в один массив:

np.array([...]).sum(axis=0)

Как было указано в комментарии, обработка с самого начала как массива numpy имеет больше смысла .

0 голосов
/ 04 февраля 2020

Обратите внимание на степень вложенности:

Список из 2 массивов:

In [93]: sum([np.array([1, 2, 3]), np.array([6, 5, 4])])                                       
Out[93]: array([7, 7, 7])

Список из 1 массива:

In [94]: sum([np.array([1, 2, 3])])                                                            
Out[94]: array([1, 2, 3])

Один массив, не список

In [95]: sum(np.array([1, 2, 3]))                                                              
Out[95]: 6

Список чисел:

In [96]: sum([1, 2, 3])                                                                        
Out[96]: 6

sum повторяет аргумент, будь то список или массив. [93] работает, потому что массивы реализуют свой собственный метод суммирования. Он не работает со списком списков.

Убедившись, что содержимое является двумерным массивом, обобщаются следующие случаи:

In [102]: sum(np.atleast_2d([[1, 2, 3], [6, 5, 4]]))                                           
Out[102]: array([7, 7, 7])
In [103]: sum(np.atleast_2d([np.array([1, 2, 3]), np.array([6, 5, 4])]))                       
Out[103]: array([7, 7, 7])
In [104]: sum(np.atleast_2d([np.array([1, 2, 3])]))                                            
Out[104]: array([1, 2, 3])
In [105]: sum(np.atleast_2d(np.array([1, 2, 3])))                                              
Out[105]: array([1, 2, 3])
In [106]: sum(np.atleast_2d([1, 2, 3]))                                                        
Out[106]: array([1, 2, 3])

Или используйте сумму numpy с осью 0:

In [108]: np.atleast_2d([np.array([1, 2, 3]), np.array([6, 5, 4])]).sum(axis=0)                
Out[108]: array([7, 7, 7])
In [109]: np.atleast_2d(np.array([6, 5, 4])).sum(axis=0)                                       
Out[109]: array([6, 5, 4])
0 голосов
/ 04 февраля 2020

Я думаю, что это похоже на ... Мы можем сделать это, потому что logi c находится посередине, поэтому мы можем заставить программу работать, изменив местоположение.

IIU C, Use numpy .sum с осью = 0:

np.sum ([np.array ([1, 2, 3])], axis = 0) Вывод:

массив ([1 , 2, 3]) и

np.sum ([np.array ([3, 1, 2]), np.array ([6, 5, 4])]], axis = 0) Вывод :

массив ([7, 7, 7])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...