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

时间:2021-06-09 11:11:00

标签: python arrays numpy nan

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

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

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

结果似乎是所有 NaN 的图表。只有一个小方块:

plt.imshow(test)

enter image description here

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

test.max()
>>>nan

test.min()
>>>nan

我想了解为什么会得到这个结果,以及如何正确地为值为 0 的像素不提供任何数据值

2 个答案:

答案 0 :(得分:0)

列个清单

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

np.array(你的数组)

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

答案 1 :(得分:0)

您在 docs(备注部分)中有原因和解决方案。

<块引用>

NaN 值被传播,也就是说,如果至少一项是 NaN,则 相应的最大值也将是 NaN。忽略 NaN 值 (MATLAB 行为),请使用 nanmax。

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

应该给出预期的结果。