Python 将像素指定为0和1

Python 将像素指定为0和1,python,if-statement,boolean,pixel,Python,If Statement,Boolean,Pixel,遥感: 有没有一种方法可以基于从两个单独频带的DN值派生的条件语句,创建DN值仅为0和1的新频带或数组?例如,如果带4中的值=>11000,而带11中的值,则可以使用Python的三元运算符和列表理解: >>> vals = [10000, 500, 200, 10290, 10290129, 3] >>> vals = [1 if i > 500 else 0 for i in vals] >>> vals [1, 0, 0, 1,

遥感:


有没有一种方法可以基于从两个单独频带的DN值派生的条件语句,创建DN值仅为0和1的新频带或数组?例如,如果带4中的值=>11000,而带11中的值,则可以使用Python的三元运算符和列表理解:

>>> vals = [10000, 500, 200, 10290, 10290129, 3]
>>> vals = [1 if i > 500 else 0 for i in vals]
>>> vals
[1, 0, 0, 1, 1, 0]
或者使用numpy(始终是一个不错的选择):

一些时间安排:

In [4]: vals = np.random.rand(10000)

In [6]: %timeit [1 if i >= 0.5 else 0 for i in vals]
1.26 ms ± 105 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [7]: %timeit [int(i >= 0.5) for i in vals]
5.18 ms ± 61 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [8]: %timeit (vals >= 0.5).astype(int)
12.9 µs ± 308 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
通常,numpy获胜,然后是三元数,然后是整数转换。

您可以使用
int()
将布尔值转换为
0
1

>>> l = [1, 2, 3, 4, 5, 6]
>>> [int(2 < i < 5) for i in l]
[0, 0, 1, 1, 0, 0]
l=[1,2,3,4,5,6] >>>[int(2如果您给出更具体的输入示例,我可以更新我的答案,使其不那么笼统。基本上,我使用的是卫星图像中的红色和热带,每个带不同的DN值范围,并尝试识别云像素(其DN在我给出的阈值范围内)。我想将云像素指定为0,将其余像素指定为1,这样我就可以创建一个遮罩,然后将其与其余的频带相乘,以创建一个输出,其中云像素=0,其余像素保持不变。。不知道这是否清楚,我是新的编码!你能展示一些示例输入吗?
>>> l = [1, 2, 3, 4, 5, 6]
>>> [int(2 < i < 5) for i in l]
[0, 0, 1, 1, 0, 0]