为什么nympy.matrix的numpy.copy不像原始矩阵那样?使用该副本的转置进行乘法不起作用

时间:2015-11-18 22:07:47

标签: python numpy matrix

我需要在函数内部使用复制矩阵。但副本一个 (n x 1)矩阵(向量)并不像它应该的那样。 我在这里做了一个例子: x乘以y的转置给出了一个正常的向量乘法,其结果是(1x1) - 矩阵。 x和y的副本a和b不会这样做。它们返回一个维数(n×n)的数组。 我在这做错了什么?我怎么能避免这个?

    >>>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]])

2 个答案:

答案 0 :(得分:2)

您的原始数组属于子类matrix。副本是基础array类。使用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]])

另一个答案中提出的解决方案是将matrix乘法替换为np.arraynp.dot)的等效乘法。

答案 1 :(得分:-1)

如果您希望复制矩阵,请使用numpy.copy上的copy方法,而不要使用matrix

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