2015-07-01 3 views
2

У меня есть два Numpy массивов, один фасонных (3000,), а другой представляет собой массив из двадцати 3000 по 3000 матриц, то есть форма (20, 3000, 3000)np.dot() с Python вещания

first.shape = (3000,) 
second.shape = (20, 3000, 3000) 

Я делаю numpy dot товар.

import numpy as np 
dotprod1 = np.dot(second, first) 

это работает, а выходной сигнал dotprod1 представляет собой массив в форме (20, 3000).

Но что, если я хочу снова взять точечный продукт?

dotprod2 = np.dot(first, dotprod1) 

Это дает нам ошибку.

ValueError: shapes (3000,) and (20,3000) not aligned: 3000 (dim 0) != 20 (dim 0) 

Я хотел бы иметь выход из 20 значений. Как использовать радиовещание для этого?

+0

же вопрос, но с '(10,100,100)' массива: http://stackoverflow.com/questions/31128883/numpy-np-dot-on-multidimensional-arrays – hpaulj

ответ

1

dotprod2 = np.dot(first, dotprod1) терпит неудачу, потому что first имеет форму (3000,) и dotprod1 имеет форму (20, 3000), поменять их местами и ошибка будет идти (если это ваше намерение):

dotprod2 = np.dot(dotprod1, first) 

кроме того, вы можете также использовать np.ndarray.dot сделать семантика ясно:

dotprod2 = dotprod1.dot(first) 
+0

Обратите внимание, что это неправильный ответ, если вы хотите сделать «матричное умножение» с массивами numpy – ShanZhengYang

+0

@ShanZhengYang, ** ** должна быть ** ndim == ** 2 ** в вашем случае (некоторые массив 'ndim'> 2), общее решение является точно * точечным произведением двух массивов *. Что вы подразумеваете под ** правильным ** в своем определении? Вы также можете проверить документы 'np.dot': * Для 2-D массивов это эквивалентно умножению матрицы *. – zhangxaochen

+0

То, что я подразумевал под матричным умножением, состоит в том, что один массив должен быть транспонирован. Для матриц операция должна состоять из двух массивов в форме (1,3000) и (3000,1) и одной матрицы (3000 3000). – ShanZhengYang

Смежные вопросы