簡體   English   中英

np.logical_and運算符無法正常工作(numpy)

[英]np.logical_and operator not working as it should (numpy)

我有一個數據集(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]

因此,前3個條目仍然保留。

愚蠢的錯誤,我不得不將數組包裝為numpy數組,然后將變量分配給新構造的數組,如下所示:

    j = np.array(pp)
    mask = j[np.logical_and(j >= 0.0, j <= 1.0)]

問題是您沒有刪除所選的索引。 您只是選擇它們。

如果要刪除它們。 您應該這樣將它們轉換為Nan

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]]

另外,您可以查看屏蔽數組

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM