numpy: скалярное произведение по столбцам

Дано 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 на месте.

14
задан user7116 8 June 2011 в 16:31
поделиться