我需要在函数内部使用复制矩阵。但副本一个 (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]])
答案 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.array
(np.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)
的别名,这会导致输入的向下转换。