You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

卫星图像NoData像素坐标生成:3D NumPy数组格式转换求助

实现建议

方法1:基于现有f和g转换坐标

你已经有了包含0值的行索引数组f,以及每行对应0值列索引的二维数组g,可以用列表推导式直接生成目标坐标格式:

# 生成[[列索引, 行索引], ...]格式的坐标列表
coords = [[col, row] for row, cols in zip(f, g) for col in cols]

如果需要numpy数组格式(方便后续掩膜操作),可以用numpy的向量化操作:

import numpy as np

# 将g展开为一维列索引数组
cols_flat = np.concatenate(g)
# 生成与列索引一一对应的行索引数组(每个行索引重复对应行的0值个数)
rows_repeated = np.repeat(f, [len(cols) for cols in g])
# 合并为二维坐标数组
coords_np = np.column_stack((cols_flat, rows_repeated))

方法2:直接从图像数组提取坐标(更高效)

处理卫星图像这类大数据时,用numpy的向量化操作比遍历列表效率高得多,无需先生成f和g,直接从原始二维图像数组获取所有NoData像素坐标:

import numpy as np

# 假设你的图像数组为img(二维numpy数组)
rows, cols = np.where(img == 0)
# 生成[[列索引, 行索引], ...]格式的坐标数组
coords = np.column_stack((cols, rows))

这个方法一步到位,避免了手动遍历行和列的繁琐操作,性能更优。

为什么你之前的np.dstack不生效?

np.dstack会将f扩展为与g维度匹配的数组,但它是把整个f数组作为每个坐标对的第二个元素,而不是将行索引与对应行的列索引一一配对,因此无法得到目标格式。

内容的提问来源于stack exchange,提问作者Benjamin Duncan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 22:00:56