2
我是新来的python,我试图对光栅图像进行一些简单的分类。 基本上,我正在读取TIF图像作为二维数组,并对其进行一些计算和操作。对于分类部分,我试图为陆地,水域和云层创建3个空阵列。在多个条件下,这些类将被赋值为1,并最终将这些类分别指定为landclass = 1,waterclass = 2,cloudclass = 3。花式索引中的多个条件
显然我可以分配在阵列中以1中的所有值中的一个条件 下这样的:
crop = gdal.Open(crop,GA_ReadOnly)
crop = crop.ReadAsArray()
rows,cols = crop.shape
mode = int(stats.mode(crop, axis=None)[0])
water = np.empty(shape(row,cols),dtype=float32)
land = water
clouds = water
比我有这样的事情(输出):
>>> land
array([[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.],
...,
[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 0., 0., 0.]], dtype=float32)
>>> land[water==0]=1
>>> land
array([[ 0., 0., 0., ..., 1., 1., 1.],
[ 0., 0., 0., ..., 1., 1., 1.],
[ 0., 0., 0., ..., 1., 1., 1.],
...,
[ 1., 1., 1., ..., 0., 0., 0.],
[ 1., 1., 1., ..., 0., 0., 0.],
[ 1., 1., 1., ..., 0., 0., 0.]], dtype=float32)
>>> land[crop>mode]=1
>>> land
array([[ 0., 0., 0., ..., 1., 1., 1.],
[ 0., 0., 0., ..., 1., 1., 1.],
[ 0., 0., 0., ..., 1., 1., 1.],
...,
[ 1., 1., 1., ..., 0., 0., 0.],
[ 1., 1., 1., ..., 0., 0., 0.],
[ 1., 1., 1., ..., 0., 0., 0.]], dtype=float32)
但如何可以在几个条件下,“land”中的值等于1,而不会改变阵列的形状? 我试图做到这一点
land[water==0,crop>mode]=1
我得到了ValueError。我想这
land[water==0 and crop>mode]=1
和Python问我使用a.all()或a.all()....
对于只有一个条件,结果是我想要什么,并我必须这样做才能得到结果。例如,(这是我在我的实际代码):
water[band6 < b6_threshold]=1
water[band7 < b7_threshold_1]=1
water[band6 > b6_threshold]=1
water[band7 < b7_threshold_2]=1
land[band6 > b6_threshold]=1
land[band7 > b7_threshold_2]=1
land[clouds == 1]=1
land[water == 1]=1
land[b1b4 < 0.5]=1
land[band3 < 0.1)]=1
clouds[land == 0]=1
clouds[water == 0]=1
clouds[band6 < (b6_mode-4)]=1
我发现这是一个有点混乱,我想一个声明中的所有条件结合起来...任何建议上?
非常感谢!
hi @wim,我尝试过,仍然有ValueError ... – user3412669
尝试像这样:'土地[(水== 0)&(作物>模式)] = 1' – wim
ohh似乎有用!还有一个questiion,我可以有多个条件使用该表达式?谢谢 – user3412669