Numpy 两个向量的矩阵乘法
我试着用numpy做两个向量的矩阵乘法,这将得到一个数组 示例Numpy 两个向量的矩阵乘法,numpy,Numpy,我试着用numpy做两个向量的矩阵乘法,这将得到一个数组 示例 In [108]: b = array([[1],[2],[3],[4]]) In [109]: a =array([1,2,3]) In [111]: b.shape Out[111]: (4, 1) In [112]: a.shape Out[112]: (3,) In [113]: b.dot(a) ValueError: objects are not aligned 从这些形状可以看出,数组a实际上不是矩阵。关键是这样定
In [108]: b = array([[1],[2],[3],[4]])
In [109]: a =array([1,2,3])
In [111]: b.shape
Out[111]: (4, 1)
In [112]: a.shape
Out[112]: (3,)
In [113]: b.dot(a)
ValueError: objects are not aligned
从这些形状可以看出,数组a实际上不是矩阵。关键是这样定义a
In [114]: a =array([[1,2,3]])
In [115]: a.shape
Out[115]: (1, 3)
In [116]: b.dot(a)
Out[116]:
array([[ 1, 2, 3],
[ 2, 4, 6],
[ 3, 6, 9],
[ 4, 8, 12]])
当获取向量作为矩阵的字段或列时,如何获得相同的结果
In [137]: mat = array([[ 1, 2, 3],
[ 2, 4, 6],
[ 3, 6, 9],
[ 4, 8, 12]])
In [138]: x = mat[:,0] #[1,2,3,4]
In [139]: y = mat[0,:] #[1,2,3]
In [140]: x.dot(y)
ValueError: objects are not aligned
这与基本示例中的捕获类似
x
和y
都不是矩阵,而是一维数组
In [143]: x.shape
Out[143]: (4,)
In [144]: y.shape
Out[144]: (3,)
我们必须给它们加上第二个维度,即1
In [171]: x = array([x]).transpose()
In [172]: x.shape
Out[172]: (4, 1)
In [173]: y = array([y])
In [174]: y.shape
Out[174]: (1, 3)
In [175]: x.dot(y)
Out[175]:
array([[ 1, 2, 3],
[ 2, 4, 6],
[ 3, 6, 9],
[ 4, 8, 12]])
这与基本示例中的捕获类似
x
和y
都不是矩阵,而是一维数组
In [143]: x.shape
Out[143]: (4,)
In [144]: y.shape
Out[144]: (3,)
我们必须给它们加上第二个维度,即1
In [171]: x = array([x]).transpose()
In [172]: x.shape
Out[172]: (4, 1)
In [173]: y = array([y])
In [174]: y.shape
Out[174]: (1, 3)
In [175]: x.dot(y)
Out[175]:
array([[ 1, 2, 3],
[ 2, 4, 6],
[ 3, 6, 9],
[ 4, 8, 12]])
使用2d数组而不是1d向量,并使用
*
In [8]: #your code from above
In [9]: y = mat[0:1,:]
In [10]: y
Out[10]: array([[1, 2, 3]])
In [11]: x = mat[:,0:1]
In [12]: x
Out[12]:
array([[1],
[2],
[3],
[4]])
In [13]: x*y
Out[13]:
array([[ 1, 2, 3],
[ 2, 4, 6],
[ 3, 6, 9],
[ 4, 8, 12]])
使用2d数组而不是1d向量,并使用
*
In [8]: #your code from above
In [9]: y = mat[0:1,:]
In [10]: y
Out[10]: array([[1, 2, 3]])
In [11]: x = mat[:,0:1]
In [12]: x
Out[12]:
array([[1],
[2],
[3],
[4]])
In [13]: x*y
Out[13]:
array([[ 1, 2, 3],
[ 2, 4, 6],
[ 3, 6, 9],
[ 4, 8, 12]])
您正在计算两个向量的值。您可以将此功能用于:
In [18]: a
Out[18]: array([1, 2, 3])
In [19]: b
Out[19]: array([10, 20, 30, 40])
In [20]: numpy.outer(b, a)
Out[20]:
array([[ 10, 20, 30],
[ 20, 40, 60],
[ 30, 60, 90],
[ 40, 80, 120]])
您正在计算两个向量的值。您可以将此功能用于:
In [18]: a
Out[18]: array([1, 2, 3])
In [19]: b
Out[19]: array([10, 20, 30, 40])
In [20]: numpy.outer(b, a)
Out[20]:
array([[ 10, 20, 30],
[ 20, 40, 60],
[ 30, 60, 90],
[ 40, 80, 120]])
x.dot(y)
和x*y
在这种情况下,技巧是使用切片,使x
和y
都是二维数组。x.dot(y)
和x*y
在这种情况下,技巧是使用切片,使x
和y
都是二维数组。而不是x=数组([x]).transpose()
,您只需执行x.restrape(-1,1)
或x[…,np.newaxis]
,两者都不会创建新数组。您只需执行x=array([x])而不是x=array([x]).transpose()
,您只需执行x.restrape(-1,1)
或x[…,np newaxis]
,两者都不会创建新数组。这是一个原型StackExchange答案。这是一个原型StackExchange答案。