Умножение матриц Python;массив NumPy - PullRequest
2 голосов
/ 11 мая 2011

У меня есть некоторые проблемы с умножением матрицы:

Я хочу умножить, например, a и b:

a=array([1,3])                     # a is random and is array!!! (I have no impact on that)
                                     # there is a just for example what I want to do...

b=[[[1], [2]],                     #b is also random but always size(b)=  even 
   [[3], [2]], 
   [[4], [6]],
   [[2], [3]]]

Так что я хочу, чтобы умножить таким образом

[1,3]*[1;2]=7
[1,3]*[3;2]=9
[1,3]*[4;6]=22
[1,3]*[2;3]=11

Итак, результат, который мне нужен, будет выглядеть так:

x1=[7,9]
x2=[22,8]

Я знаю, что это очень сложно, но я пытаюсь реализовать это 2 часа, но безуспешно: (

Ответы [ 3 ]

7 голосов
/ 11 мая 2011

Ваш b, кажется, имеет ненужное измерение.

При правильном b вы можете просто использовать dot(.), например:

In []: a
Out[]: array([1, 3])
In []: b
Out[]:
array([[1, 2],
       [3, 2],
       [4, 6],
       [2, 3]])
In []: dot(b, a).reshape((2, -1))
Out[]:
array([[ 7,  9],
       [22, 11]])
3 голосов
/ 11 мая 2011

Как насчет этого:

In [16]: a
Out[16]: array([1, 3])

In [17]: b
Out[17]: 
array([[1, 2],
       [3, 2],
       [4, 6],
       [2, 3]])

In [18]: np.array([np.dot(a,row) for row in b]).reshape(-1,2)
Out[18]: 
array([[ 7,  9],
       [22, 11]])
0 голосов
/ 11 мая 2011
result = \
[[sum(reduce(lambda x,y:x[0]*y[0]+x[1]*y[1],(a,[b1 for b1 in row]))) \
  for row in b][i:i+2] \
    for i in range(0, len(b),2)]
...