Python 为什么numpy.matrix的numpy.copy与原始矩阵不一样?与该副本的转置相乘不起作用
我需要在函数中使用矩阵副本。但是一份 (nx1)矩阵(向量)的行为不像它应该的那样 我举了一个例子: x乘以y的转置给我一个法向量乘以(1x1)-矩阵的结果 x和y的副本a和b不会这样做。它们返回一个维数为(nxn)的数组。 我做错了什么?我怎么能避免呢Python 为什么numpy.matrix的numpy.copy与原始矩阵不一样?与该副本的转置相乘不起作用,python,numpy,matrix,Python,Numpy,Matrix,我需要在函数中使用矩阵副本。但是一份 (nx1)矩阵(向量)的行为不像它应该的那样 我举了一个例子: x乘以y的转置给我一个法向量乘以(1x1)-矩阵的结果 x和y的副本a和b不会这样做。它们返回一个维数为(nxn)的数组。 我做错了什么?我怎么能避免呢 >>>import numpy as np >>>x=np.matrix('1;2;3') >>>y=np.matrix('1;1;-1') >&g
>>>import numpy as np
>>>x=np.matrix('1;2;3')
>>>y=np.matrix('1;1;-1')
>>>x.T*y
matrix([[0]])
>>>a=np.copy(x)
>>>b=np.copy(y)
>>>a.T*b
array([[ 1, 2, 3],
[ 1, 2, 3],
[-1, -2, -3]])
您的原始数组属于子类
matrix
。副本是基本数组类。使用特定于矩阵类的复制方法x.copy()
,生成另一个矩阵。然后矩阵乘法运算将像以前一样工作
In [52]: x=np.matrix('1;3;3')
In [53]: x
Out[53]:
matrix([[1],
[3],
[3]])
In [54]: np.copy(x)
Out[54]:
array([[1],
[3],
[3]])
In [55]: x.copy()
Out[55]:
matrix([[1],
[3],
[3]])
另一个答案中提出的解决方案是将矩阵
乘法替换为np.array
(np.dot
)的等效乘法。如果要复制矩阵,则不要使用numpy.copy
,而是使用矩阵
上的copy
方法
>>> x = np.matrix('1;3;3')
>>> x.copy()
matrix([[1],
[3],
[3]])
另一种选择是使用numpy.array(x,copy=True,subok=True)
请注意,numpy.copy
只是numpy.array(x,copy=True)
的别名,这会导致向下转换输入