矩阵和数组的Numpy点积就是矩阵

矩阵和数组的Numpy点积就是矩阵,numpy,python-3.7,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

当我更新到最新版本的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)
A=np.矩阵([[4,1,0,0],[1,5,1,0],[0,1,6,1],[1,0,1,4])
x=np.array([0,0,0,0])
打印(x)
x1=np.点(A,x)
打印(x1)
x2=np.点(A,x1)
打印(x2)
输出:
[0 0 0 0]
[[0 0 0 0]]
回溯(最近一次呼叫最后一次):
文件“review.py”,第13行,在
x2=np.点(A,x1)
ValueError:形状(4,4)和(1,4)未对齐:4(尺寸1)!=1(尺寸0)
我希望矩阵的点和向量返回一个向量,或者矩阵的点和1xn矩阵按预期工作

使用x的转置不能解决这个问题,也不能使用
A@x
A.dot(x)
np.matmul(A,x)
数组的任何变体:

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
版本的
a

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])
结果是(4,)形状。这是有道理的:(4,4)点(4,)=>(4,)

np.dot(A,x)
正在执行相同的计算,但返回一个
np.matrix
。根据定义,这是一个二维数组,因此(4,)被扩展为(1,4)

我没有一个较旧的版本来测试这个,也不知道有什么变化

如果
x
是(4,1)矩阵,则结果(4,4)点(4,1)=>(4,1):


虽然可能很烦人,但这可能是一个永久的好时机。谢谢你的快速回复!你的解决方案有效。如果矩阵是一个数组,那么用行向量来点阵似乎是不一致的,但如果它是一个矩阵,则不能。我将使用np.array类而不是np.matrixYour
x
和shape(4,)是1d数组。您可以将其视为向量或行向量,但这不会改变尺寸或形状
np.dot
描述了它如何处理1d数组,而不管它们是第一个还是第二个。有些人(具有MATLAB或线性代数背景)在构思既不是行向量也不是列向量的一维数组时确实存在问题。
In [33]: np.matrix(x)                                                                                    
Out[33]: matrix([[0, 0, 0, 0]])
In [34]: np.dot(A, np.matrix(x).T)                                                                       
Out[34]: 
matrix([[0],
        [0],
        [0],
        [0]])