Без вашего массива или меньшего заменителя я не могу точно воспроизвести вашу проблему. Но есть потенциально 2 проблемы
поплавковое тестирование не является точным, поэтому оно может соответствовать одному -28672.0, а не другому.
предположение remain intact
сложно. leave the value in the output alone
, но что это было изначально, значения 0 или NIR
.
Использование целочисленного массива для избежания проблемы с плавающей точкой:
In [20]: arr = np.arange(12).reshape(3,4)
In [21]: arr
Out[21]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
In [22]: np.multiply(arr, 10, where=arr!=10)
Out[22]:
array([[ 0, 10, 20, 30],
[ 40, 50, 60, 70],
[ 80, 90, 481036337249, 110]])
In [24]: np.multiply(arr, 10, where=arr!=10)
Out[24]:
array([[ 0, 10, 20, 30],
[ 40, 50, 60, 70],
[ 80, 90, 0, 110]])
arr[2,2]
является случайным. Фактически он начинался с массива np.empty
правильной формы и типа и заполнял все значения, кроме этого, умножением. Для правильного использования where
нам также необходимо указать параметр out
.
In [25]: out = np.full(arr.shape,-1)
In [26]: out
Out[26]:
array([[-1, -1, -1, -1],
[-1, -1, -1, -1],
[-1, -1, -1, -1]])
In [27]: np.multiply(arr, 10, where=arr!=10, out=out)
Out[27]:
array([[ 0, 10, 20, 30],
[ 40, 50, 60, 70],
[ 80, 90, -1, 110]])
Проблема неточных чисел возникает достаточно часто, и я не буду пытаться это проиллюстрировать.