遥感蟒蛇:
有没有办法根据从两个独立波段的DN值派生的条件语句创建DN值仅为0和1的新波段或数组?例如,如果带4中的值=> 11000和带11 <= 23000中的值,设置为0,否则设置为1。
答案 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()
将布尔值转换为0
或1
:
>>> l = [1, 2, 3, 4, 5, 6]
>>> [int(2 < i < 5) for i in l]
[0, 0, 1, 1, 0, 0]