Дано 2D numpy
массив, мне нужно вычислить скалярное произведение каждого столбца на себя и сохранить результат в одномерном массиве. Следующие действия работают:
In [45]: A = np.array([[1,2,3,4],[5,6,7,8]])
In [46]: np.array([np.dot(A[:,i], A[:,i]) for i in xrange(A.shape[1])])
Out[46]: array([26, 40, 58, 80])
Есть ли простой способ избежать цикла Python? Вышеизложенное вряд ли является концом света, но если для этого есть примитив numpy
, я бы хотел его использовать.
edit На практике матрица имеет много строк и относительно мало столбцы. Поэтому я не особо хочу создавать временные массивы размером больше O (A.shape [1])
. Я также не могу изменить A
на месте.