0

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

难道数组不是“完全”相等的吗?我会说它们一定是因为我没有修改任何东西,而是返回一个而不是另一个。

关于如何调试这个问题的任何想法?

4

1 回答 1

1

您可以检查数组不相等的位置

print(where(rows1 != rows2))

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

于 2015-05-29T17:24:32.647 回答