如何在python中检查(numpy数组)是否真正相等

How to check for real equality (of numpy arrays) in python?

本文关键字:是否 数组 numpy python 检查      更新时间:2023-10-16

我在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。然后在这个包中出现问题。

两个数组可能不"完全"相等吗?我会说它们一定是,因为我没有修改任何东西,只是返回一个而不是另一个。

你知道如何调试这个问题吗?

你可以检查数组不相等的地方:

print(where(rows1 != rows2))

但是你所做的是不清楚的,首先在numpy中没有nonzeros函数,只有一个返回坐标元组的非零函数。您是否只使用与行对应的那个?