2013-11-25 2 views
1

Мне нелегко это делать. У меня есть две матрицы m x n (A и B), и мне нужно умножить каждый столбец A на строки в B, чтобы сгенерировать матрицу m x (n * n). Я предполагаю, что я был не очень понятно, в объяснении, так что я выложу пример:Код векторизации недействительности

A = 
[1 2 
3 4] 
B = 
[5 6 
7 8] 

Я хочу, чтобы:

[[5 6] [10 12] 
    [21 24] [28 32]] 

Я был в состоянии сделать это с помощью for петли, но я хочу во избежание for как можно больше. Также использование numpy для всего этого и всех данных сохраняется как np.array.

ответ

3

Может быть:

>>> A = np.array([[1,2],[3,4]]) 
>>> B = np.array([[5,6],[7,8]]) 
>>> (A * B[None, :].T).T 
array([[[ 5, 6], 
     [21, 24]], 

     [[10, 12], 
     [28, 32]]]) 

где мы используем None добавить дополнительное измерение к B, и несколько транспозиции, чтобы получить правильное выравнивание.

+0

Спасибо, что сделал трюк: D – asiviero

+0

@DSM, хорошая работа. Согласовано ли использование «Нет» для увеличения ранга массива? – agconti

+1

@agconti: Ну, я думаю, что официально использовать np.newaxis как имя, является официальным (tm), но 'np.newaxis' - просто другое имя для' None'. В принципе, хотя они могли изменить его на другого дозорного. – DSM

0

Если я правильно понимаю вас, вы хотите, чтобы основное (m * n) умножение было правильным? Используйте numpy.dot():

>>> a = [[1, 0], [0, 1]] 
>>> b = [[4, 1], [2, 2]] 
>>> np.dot(a, b) 
array([[4, 1], 
     [2, 2]]) 
+0

Ожидаемый результат, предоставляемый OP, явно указывает на то, что базовое умножение не то, что им нужно. – BartoszKP

+0

На самом деле нет, и я не знаю, как это объяснить, поэтому я считаю, что лучше всего понять, что я хочу, чтобы посмотреть на пример – asiviero

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