#python #numpy
#python #numpy
Вопрос:
Рассмотрим, что у меня есть следующий список np-массивов:
>>> l = []
>>> l.append(np.array([[1,2,3],[4,5,6]]))
>>> l.append(np.array([[7,8],[9,10]]))
>>> l.append(np.array([[7,8],[9,10],[11,12]]))
Я хочу найти сумму квадратов каждого отдельного значения всех массивов numpy в этом списке. Выполнение следующих действий:
>>> np.sum(np.square(l))
выдает следующую ошибку:
ValueError: operands could not be broadcast together with shapes (2,3) (2,2)
Как я могу сделать это более питоническим или нумитоническим способом? Должен ли я вручную перебирать каждый массив numpy, чтобы найти их квадраты, а затем суммировать вручную, как показано ниже?
>>> np.sum(list(map(lambda i: np.sum(np.square(i)),l)))
944
PS:
Для следующего списка
>>> l
[array([[1, 2, 3],
[4, 5, 6]]), array([[ 7, 8],
[ 9, 10]])]
Я могу это сделать:
>>> np.sum(np.square(np.hstack(l)))
385
Но, похоже, существуют некоторые ограничения на размеры входного списка для hstack()
работы, поскольку он выдает аналогичную ошибку в первом списке.
Ответ №1:
Должен ли я вручную перебирать каждый массив numpy, чтобы найти их квадраты, а затем суммировать вручную, как показано ниже?
По сути, да. У вас есть список массивов numpy с несовместимыми формами / длинами. Это означает, что вы выходите за рамки модели массива numpy. Но ваша реализация может быть немного более плавной:
sum(np.sum(np.square(a)) for a in l)