np.logical_and运算符不能正常工作(numpy)

问题描述 投票:0回答:2

我有一个数据集(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]

所以前三个条目仍然存在。

python numpy
2个回答
0
投票

问题是您没有删除您选择的索引。你只是选择它们。

如果你想删除它们。您可能应该将它们转换为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]]

或者,您可以查看蒙版数组


0
投票

愚蠢的错误,我不得不将数组包装在一个numpy数组中,然后将一个变量分配给新构造的数组,如下所示:

    j = np.array(pp)
    mask = j[np.logical_and(j >= 0.0, j <= 1.0)]
© www.soinside.com 2019 - 2024. All rights reserved.