将像素指定为0和1

2024-09-28 01:28:46 发布

您现在位置:Python中文网/ 问答频道 /正文

遥感:

有没有一种方法可以基于从两个单独频带的DN值派生的条件语句来创建DN值仅为0和1的新频带或数组?例如,如果波段4中的值大于等于11000,波段11中的值小于等于23000,则设置为0,否则设置为1。你知道吗


Tags: 方法波段数组语句条件dn频带
2条回答

您可以使用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转换。你知道吗

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

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

相关问题 更多 >

    热门问题