python - 在 python 中使用 RGB 栅格识别植被 - 数组问题
问题描述
抱歉,如果我的问题措辞不佳,但基本上我使用带有 GDAL 的 Python 来识别 TIF 文件中的植被(仅使用 RGB 波段)。我查看了图像中的波段值,并查看了一些随机样本点,发现植被往往落在每个波段的特定范围内(例如:30-71 蓝色、125-175 绿色等)。所以这就是我写出来的方式,“数组”是一个包含三个波段的数组:
vegetation = (arrays[0] > 67 & arrays[0] < 133) & (arrays[1] > 125 & arrays[1] < 175) & (arrays[2] > 30 & arrays[2] < 71)
然后我创建一个新文件并使用 band.WriteArray(vegetation)。但是,对于植被线,我收到以下错误:
The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
这到底是什么意思?我应该以不同的方式格式化它吗?Python 不完全是我的强项,所以越简单越好。
解决方案
&
的优先级高于>
。所以
arrays[0] > 67 & arrays[0] < 133
读作
arrays[0] > (67 & arrays[0]) < 133
和链接布尔运算符 ( x > y > z
) 强制将所有操作数转换为布尔值。例如
(arrays[0] > 67 & arrays[0]) < 133
是合法的。正如您的错误所说,将数组转换为布尔值是不明确的。你可能想要的是
(arrays[0] > 67) & (arrays[0] < 133)
你也可以去掉所有其他的括号,除非你更喜欢这种风格,因为(x & y) & z == x & (y & z)
推荐阅读
- c# - 如何检查记录是否存在于一个表中,那么它应该在 C# 中忽略它
- dynamic - 自校正概率分布 - 保持随机性,同时将每个结果的频率吸引到其概率
- transactions - iOS Swift:从 Apple Wallet 中检索交易列表
- python-3.x - 计算纬度和经度的欧几里得距离 - Pandas DataFrame Python
- c# - 在 Where 子句中带有“.Any”的动态 Linq(C# / .Net Core / EF Core)
- javascript - Node.js 集群架构:如何扩展 master worker
- android - Fileobserver 的 onevent 方法触发但我如何在删除任何文件之前获取文件
- python - Python按键值列表对字典进行排序
- visual-studio-code - 使用 Azure 应用服务部署 Aurelia 应用
- asp.net-core - 从特权容器更改主机 sysctl 参数