Python 为什么numpy.matrix的numpy.copy与原始矩阵不一样?与该副本的转置相乘不起作用

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

我需要在函数中使用矩阵副本。但是一份 (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')

    >>>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)
的别名,这会导致向下转换输入