将 0 值更改为 numpy 数组中的 nan 值会将所有内容更改为 nan

Change 0 values to nan values in numpy array changes everything to nan

我有形状为 (1212,2117) 的 numpy 数组。 该数组包含值为 0 或大于 0 的值的像素,如下所示:

我想给出没有数据的0像素值。我试过这样做:

arr=arr.astype('float')
arr[arr==0]=np.nan

看起来结果是图表就是 NaN.with 一个小方块:

plt.imshow(test)

然而,似乎所有的值都发生了变化,就好像我检查这个数组的最大值或最小值是多少,我得到 nan:

test.max()
>>>nan

test.min()
>>>nan

我想了解为什么会得到这个结果,以及如何正确地为值为 0.

的像素提供无数据值

列出清单

遍历每个像素,检查它是否是 nan,然后附加 0,如果不是则附加数字。

np.array(你的数组)

虽然它不是pythonic,但它可以完成工作。

你在docs(注释部分)中有原因和解决方法。

NaN values are propagated, that is if at least one item is NaN, the corresponding max value will be NaN as well. To ignore NaN values (MATLAB behavior), please use nanmax.

np.nanmax(arr)
# and
np.nanmin(arr))

应该给出预期的结果。