矩阵与数组的数字积是矩阵

时间:2019-05-22 02:23:16

标签: numpy python-3.7

当我更新到最新版本的numpy时,我的很多代码都中断了,因为现在每次我在矩阵和数组上调用np.dot()时,它都会返回一个1xn矩阵,而不是简单的数组。 当我尝试将新的向量/数组乘以矩阵时,这会导致我出错

示例

A = np.matrix( [ [4, 1, 0, 0], [1, 5, 1, 0], [0, 1, 6, 1], [1, 0, 1, 4] ] )

x = np.array([0, 0, 0, 0])
print(x)

x1 = np.dot(A, x)
print(x1)

x2 = np.dot(A, x1)
print(x2)

output:
[0 0 0 0]
[[0 0 0 0]]
Traceback (most recent call last):
  File "review.py", line 13, in <module>
    x2 = np.dot(A, x1)
ValueError: shapes (4,4) and (1,4) not aligned: 4 (dim 1) != 1 (dim 0)

我希望矩阵和向量的点都将返回向量,或者矩阵和1xn矩阵的点将按预期工作。

使用x的转置无法解决此问题,也不能使用A @ xA.dot(x)np.matmul(A, x)的任何变体形式

1 个答案:

答案 0 :(得分:1)

您的数组:

In [24]: A = np.matrix( [ [4, 1, 0, 0], [1, 5, 1, 0], [0, 1, 6, 1], [1, 0, 1, 4] ] )   
    ...: x = np.array([0, 0, 0, 0])                                                                      
In [25]: A.shape                                                                                         
Out[25]: (4, 4)
In [26]: x.shape                                                                                         
Out[26]: (4,)

圆点:

In [27]: np.dot(A,x)                                                                                     
Out[27]: matrix([[0, 0, 0, 0]])     # (1,4) shape

我们尝试相同的方法,但是使用ndarray的{​​{1}}版本:

A

结果是(4,)形状。那是有道理的:(4,4)点(4,)=>(4,)

In [30]: A.A Out[30]: array([[4, 1, 0, 0], [1, 5, 1, 0], [0, 1, 6, 1], [1, 0, 1, 4]]) In [31]: np.dot(A.A, x) Out[31]: array([0, 0, 0, 0]) 进行相同的计算,但返回np.dot(A,x)。根据定义,它是一个2d数组,因此(4,)扩展为(1,4)。

我没有较旧的版本可以对此进行测试,并且不知道有任何更改。

如果np.matrix是(4,1)矩阵,则结果(4,4)dot(4,1)=>(4,1):

x