Python: 在Numpy中将两个一维矩阵相乘

3
a = np.asarray([1,2,3])

b = np.asarray([2,3,4,5])

a.shape

(3,)

b.shape

(4,)

我想要一个 3×4 的矩阵,它是 a 和 b 的乘积。

1
2    *    2 3 4 5
3

np.dot(a, b.transpose())

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: objects are not aligned

仅当数组为 2D 时,点积才等价于矩阵乘法,因此 np.dot 不适用。

4个回答

6
这是 np.outer(a, b)
In [2]: np.outer([1, 2, 3], [2, 3, 4, 5])
Out[2]: 
array([[ 2,  3,  4,  5],
       [ 4,  6,  8, 10],
       [ 6,  9, 12, 15]])

哇,这个可以工作,正是我想要的,并且需要对我的现有代码进行最少的更改。谢谢! - Jobs

4
不需要使用matrix子类型。常规的array可以扩展到2D(如果需要还可以转置)。
In [2]: a=np.array([1,2,3]) 
In [3]: b=np.array([2,3,4,5])

In [4]: a[:,None]
Out[4]: 
array([[1],
       [2],
       [3]])

In [5]: a[:,None]*b   # outer product via broadcasting
Out[5]: 
array([[ 2,  3,  4,  5],
       [ 4,  6,  8, 10],
       [ 6,  9, 12, 15]])

制作该列数组的其他方法

In [6]: np.array([[1,2,3]]).T
Out[6]: 
array([[1],
       [2],
       [3]])

In [7]: np.array([[1],[2],[3]])
Out[7]: 
array([[1],
       [2],
       [3]])

In [9]: np.atleast_2d([1,2,3]).T
Out[9]: 
array([[1],
       [2],
       [3]])

谢谢!这些非常有帮助。 - Jobs

0

使用asmatrix代替asarray

import numpy as np
a = np.asmatrix([1,2,3])
b = np.asmatrix([2,3,4,5])
a.shape #(1, 3)
b.shape #(1, 4)
np.dot(a.transpose(),b)

结果为:

matrix([[ 2,  3,  4,  5],
        [ 4,  6,  8, 10],
        [ 6,  9, 12, 15]])

0

以下代码基本上按照要求执行,但在重新调整数组时您犯了一个错误,应该重新调整它们以确保满足矩阵乘法属性。

    a = np.asarray([1,2,3])
    b = np.asarray([2,3,4,5])
    a.reshape(3,1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接