【发布时间】:2016-07-19 13:18:27
【问题描述】:
我有一个二维 numpy 数组,我使用的是 python 3.5。我开始学习布尔索引,这很酷。我可以用我的二维数组 arr 来做到这一点。 掩码 = arr > 127 arr[掩码] = 0
这很完美,但现在我正在尝试更改此逻辑以使用布尔索引
for x in range(arr.shape[0]):
for y in range(arr.shape[1]):
if arr[x,y] < -10:
arr[x,y] = 0
elif arr[x,y] < 15:
arr[x,y] = arr[x,y] + 5
else:
arr[x,y] = 30
我为索引尝试了多个条件运算符,但出现以下错误:
ValueError: boolean index array should have 1 dimension boolean index array should have 1 dimension。
我尝试了多个版本以尝试使其正常工作。这是产生 ValueError 的一次尝试。
arr_temp = arr.copy()
mask = arry_temp < -10
mask2 = arry_temp < 15
mask3 = mask ^ mask3
arr[mask] = 0
arr[mask3] = arry[mask3] + 5
arry[~mask2] = 30
我在 mask3 上收到错误消息。我是新手,所以我知道上面的代码在尝试解决它时效率不高。
任何提示将不胜感激。
【问题讨论】:
-
arr[arr < -10] = 0、arr[arr < 15] = arr[arr < 15] + 5和arr[arr >= 15] = 30? -
您的问题是您向我们展示了 old 代码,以及 new 代码的错误,而没有显示实际产生错误的新代码。这不是很实用,因为我们必须猜测你实际写了什么才能得到那个错误。
-
我认为您的蒙版创建需要一些帮助:
mask1 = arr<-10 mask2 = ~mask1 & (arr<15) mask3 = ~(mask1 | mask2),然后使用mask1,2,3设置0, +5 and 30值。