用numpy替换数组中的数据



我使用数字高程模型作为数组,并且我想创建一个仅具有低于某个值的像素的新数组。我尝试使用for循环。

下面是简单数据的操作:

import numpy as np
array1 = array2 = np.arange(9).reshape(3,3)
array2 = array2.astype("float") #np.nan doesn't work with integers
for row in array2: 
for item in row:
if item > 3.0:
item=np.nan
print(np.array_equal(array1,array2))

循环结束后,数组保持不变。你知道为什么这些值不会被替换吗?

您只更改item,您需要在array2中插入item,您可以使用np.where,如下所示:

>>> array1 = np.arange(9).reshape(3,3)
>>> array2 = np.where(array1 > 3, np.nan, array1)
>>> array2
array([[ 0.,  1.,  2.],
[ 3., nan, nan],
[nan, nan, nan]])
>>> np.array_equal(array1, array2)
False

值不被替换,因为item是每个数组项的副本。

除此之外,使用纯python循环效率不高。考虑使用array2[array2 > 3.0] = np.nan对代码进行矢量化。

最新更新