首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将像素指定为0和1

将像素指定为0和1
EN

Stack Overflow用户
提问于 2018-04-05 03:34:36
回答 2查看 199关注 0票数 2

遥感蟒蛇:

有没有一种方法可以基于从两个不同波段的DN值派生的条件语句来创建一个DN值仅为0和1的新波段或数组?例如,如果值在频带4 => 11000,值在频带11 <= 23000,则设置为0,否则设置为1。

EN

回答 2

Stack Overflow用户

发布于 2018-04-05 03:38:17

您可以只使用Python的三元运算符和列表理解:

代码语言:javascript
运行
复制
>>> 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 (总是一个好的选择):

代码语言:javascript
运行
复制
>>> 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])

一些计时:

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2018-04-05 03:42:02

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

代码语言:javascript
运行
复制
>>> l = [1, 2, 3, 4, 5, 6]
>>> [int(2 < i < 5) for i in l]
[0, 0, 1, 1, 0, 0]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49659044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档