在Python中,从数据中选择一个范围而不丢失维度

在Python中,从数据中选择一个范围而不丢失维度,python,python-2.7,arcpy,Python,Python 2.7,Arcpy,我有一个数组,我想从数据中选择一个范围。数据集位于twi数组中,最小值为0,最大值为26 我将数据集从光栅转换为阵列twi\u光栅转换为twi\u阵列 twi_array = arc.RasterToNumPyArray(twi_raster , nodata_to_value=0) x= twi_array>9 and twi_array<=17 twi_array = [ twi_array if x else 0 for x in twi_array] 我的回答中混入了

我有一个数组,我想从数据中选择一个范围。数据集位于twi数组中,最小值为0,最大值为26

我将数据集从光栅转换为阵列
twi\u光栅
转换为
twi\u阵列

 twi_array = arc.RasterToNumPyArray(twi_raster , nodata_to_value=0)
 x= twi_array>9 and twi_array<=17
 twi_array = [ twi_array if x else 0 for x in twi_array]

我的回答中混入了一些概念,可能会让你们更加困惑,所以让我来为你们详细解释一下。这是对你的问题最忠实的回答:

twi_array = arc.RasterToNumPyArray(twi_raster , nodata_to_value=0)
x = lambda foo: foo > 9 and foo <= 17
twi_array = [bar if x(bar) else 0 for bar in twi_array]
我们使用
bar if x(bar)else 0
作为python三元运算符 这相当于:

if x(bar):
    bar
else:
    0

bar
仅在列表理解范围内定义(即在
[…]
内)。我们用它来迭代twi_数组的元素

你是想得到twi_数组中大于9的值的列表,而我是想得到9到17范围内的值的集合,并使数组的其余部分归零你的列表理解似乎有点奇怪
twi_数组=[x如果x>9,x 9,x我只想澄清x是我的条件,它不是数组twi_array@apex-meme lord我必须设置x=twi_数组这会改变我数组的维数吗?回溯(最近一次调用):twi_数组=[bar if x(bar)else 0 for bar in twi_数组]第93行,在x=lambda foo:foo>9和foo中,列表理解运算符仅适用于一维数组。如果需要在n维数组中应用此运算符,可能需要使用lambda。
def x(foo):
   return foo > 9 and foo <= 17
if x(bar):
    bar
else:
    0