我有一个数据集(ndarray,float 32),例如:
[-3.4028235e+38 -3.4028235e+38 -3.4028235e+38 ... 1.2578617e-01
1.2651859e-01 1.3053264e-01] ...
我想删除0以下的所有值,大于1,所以我使用:
with rasterio.open(raster_file) as src:
h = src.read(1)
i = h[0]
i[np.logical_and(i >= 0.0, i <= 1.0)]
显然应该删除第一个条目(即-3.4028235e + 38),但它们仍然在应用运算符后出现。我想知道这是否与科学记数法有关,并且需要执行前期步骤,但我无法确切地知道究竟是什么。和想法?
为了简化这一点,这里再次是代码:
pp = [-3.4028235e+38, -3.4028235e+38, -3.4028235e+38, 1.2578617e-01, 1.2651859e-01, 1.3053264e-01]
pp[np.logical_and(pp => 0.0, pp <= 1.0)]
print (pp)
结果
pp = [-3.4028235e+38, -3.4028235e+38, -3.4028235e+38, 0.12578617, 0.12651859, 0.13053264]
所以前三个条目仍然存在。
问题是您没有删除您选择的索引。你只是选择它们。
如果你想删除它们。您可能应该将它们转换为nans
from numpy import random, nan, logical_and
a = random.randn(10, 3)
print(a)
a[logical_and(a > 0, a < 1)] = nan
print(a)
输出示例
[[-0.95355719 nan nan]
[-0.21268393 nan -0.24113676]
[-0.58929128 nan nan]
[ nan -0.89110972 nan]
[-0.27453321 1.07802157 1.60466863]
[-0.34829213 nan 1.51556019]
[-0.4890989 nan -1.08481203]
[-2.17016962 nan -0.65332871]
[ nan 1.58937678 1.79992471]
[ nan -0.91716538 1.60264461]]
或者,您可以查看蒙版数组
愚蠢的错误,我不得不将数组包装在一个numpy数组中,然后将一个变量分配给新构造的数组,如下所示:
j = np.array(pp)
mask = j[np.logical_and(j >= 0.0, j <= 1.0)]