Как проверить на реальное равенство (массивов) в python?

У меня есть некоторые функции в 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)

Обычно он должен извлекать индексы ненулевых элементов матрицы (row1, cols1). Тем не менее, я также могу извлечь индексы вручную (row2, cols2). Проблема в том, что программа возвращает разные результаты в зависимости от того, возвращает ли функция (rows1, cols1) или же (rows2, cols2)хотя массивы должны быть равны.

Я должен, вероятно, добавить, что этот код используется в контексте pyipopt, который вызывает программный пакет C ++ IPOPT. Проблема возникает в этом пакете.

Может ли быть так, что массивы не «полностью» равны? Я бы сказал, что они так или иначе должны быть, потому что я ничего не изменяю, а возвращаю одно вместо другого.

Любая идея о том, как отладить эту проблему?

0

Решение

Вы можете проверить где массивы не равны:

print(where(rows1 != rows2))

Но то, что вы делаете, неясно, во-первых, нет nonzeros функция в NumPy, только отлична от нуля который возвращает кортеж координат. Вы используете только тот, который соответствует строкам?

1

Другие решения


По вопросам рекламы [email protected]