Python 矩阵乘法;numpy 数组

2 投票
3 回答
3245 浏览
提问于 2025-04-16 17:23

我在矩阵相乘方面遇到了一些问题:

我想把比如说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]

我知道这很复杂,但我尝试了两个小时来实现这个,但一直没有成功 :(

3 个回答

-1
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)]

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。

7

你的 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

这样怎么样:

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]])

撰写回答