将像素指定为0和1

时间:2018-04-04 19:34:36

标签: python if-statement boolean pixel

遥感蟒蛇:

有没有办法根据从两个独立波段的DN值派生的条件语句创建DN值仅为0和1的新波段或数组?例如,如果带4中的值=> 11000和带11 <= 23000中的值,设置为0,否则设置为1。

2 个答案:

答案 0 :(得分:1)

你可以使用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(总是一个不错的选择):

>>> import numpy as np
>>> vals = np.array([10000, 500, 200, 10290, 10290129, 3])
>>> vals = (vals > 500).astype(int)
>>> vals
array([1, 0, 0, 1, 1, 0])

一些时间:

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转换。

答案 1 :(得分:1)

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

>>> l = [1, 2, 3, 4, 5, 6]
>>> [int(2 < i < 5) for i in l]
[0, 0, 1, 1, 0, 0]