[英]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.