如何在python中检查(numpy数组的)真正的相等性?

2024-04-19 15:54:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python中有一些函数返回numpy.数组地址:

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。然后问题就出现在这个包中。你知道吗

是不是数组不是“完全”相等?我想说,他们一定是因为我没有修改任何东西,但返回一个,而不是另一个。你知道吗

你知道怎么调试这个问题吗?你知道吗


Tags: 函数numpytrue地址np数组equalarray
1条回答
网友
1楼 · 发布于 2024-04-19 15:54:32

您可以检查where数组不相等:

print(where(rows1 != rows2))

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

相关问题 更多 >