我在 python 中有一些函数返回一个 numpy.array:
matrix = np.array([0.,0.,0.,0.,0.,0.,1.,1.,1.,0.],
[0.,0.,0.,1.,1.,0.,0.,1.,0.,0.])
def some_function:
rows1, cols1 = numpy.nonzero(matrix)
cols2 = numpy.array([6,7,8,3,4,7])
rows2 = numpy.array([0,0,0,1,1,1])
print numpy.array_equal(rows1, rows2) # returns True
print numpy.array_equal(cols1, cols2) # returns True
return (rows1, cols1) # or (rows2, cols2)
它通常应该提取矩阵(rows1,cols1)的非零条目的索引。但是,我也可以手动提取索引(rows2、cols2)。问题是程序返回不同的结果取决于函数是否返回(rows1, cols1)
或(rows2, cols2)
,尽管数组应该相等。
我可能应该补充一点,这段代码是在pyipopt的上下文中使用的,它调用了一个 c++ 软件包IPOPT。然后问题出现在这个包中。
难道数组不是“完全”相等的吗?我会说它们一定是因为我没有修改任何东西,而是返回一个而不是另一个。
关于如何调试这个问题的任何想法?