两个看似相等的矩阵运算在Numpy中产生不同的结果

时间:2016-05-04 14:13:21

标签: numpy

我正在做以下事情:

import numpy as np
#...
G = np.dot(data.T, data) #data is a numpy matrix
H = np.copy(G)

print "G:"
print G
print "H"
print H
print type(H)

print "Op using G"
print G.dot(v.T) - W.dot(v.dot(V).T) #v, W, and V are ndarrays
print "Op using H"
print H.dot(v.T) - W.dot(v.dot(V).T)

输出如下:

G:
[[ 1.21  0.2   0.86  0.7   0.7 ]
[ 0.2   0.07  0.14  0.17  0.08]
[ 0.86  0.14  0.76  0.6   0.76]
[ 0.7   0.17  0.6   0.54  0.55]
[ 0.7   0.08  0.76  0.55  0.89]]
(5, 5)
H:
[[ 1.21  0.2   0.86  0.7   0.7 ]
[ 0.2   0.07  0.14  0.17  0.08]
[ 0.86  0.14  0.76  0.6   0.76]
[ 0.7   0.17  0.6   0.54  0.55]
[ 0.7   0.08  0.76  0.55  0.89]]

Op using G
[[ -1.71e-01  -5.49e-02  -2.78e-17  -4.59e-02   1.34e-01]]
Op using H
[ -1.71e-01  -5.49e-02  -2.78e-17  -4.59e-02   1.34e-01] 

如果H是G的精确副本,为什么结果会有所不同?

1 个答案:

答案 0 :(得分:0)

在写这个问题的时候得到了它。尽管它们的等效表示GH具有不同的类型。

print type(G)
print type(H)

输出:

<class 'numpy.matrixlib.defmatrix.matrix'>
<type 'numpy.ndarray'>

对我来说,numpy.copy总是返回一个带有参数内容而不是同一个类的对象的数组这一事实是违反直觉的。