如何从NumPy三维数组中通过二维坐标列表提取元素?
解决方案
首先需要明确:你提供的img和crds是Python列表,第一步要先转换成NumPy数组,才能利用NumPy的矢量化索引功能实现无循环提取。
实现代码
import numpy as np # 将原始列表转为NumPy数组 img_np = np.array(img) crds_np = np.array(crds) # 提取指定坐标的元素:拆分坐标的行和列索引 result = img_np[crds_np[:, 0], crds_np[:, 1]] print(result)
代码说明
crds_np[:, 0]提取所有坐标的行索引(即[1, 2]),crds_np[:, 1]提取所有坐标的列索引(即[3, 2])- NumPy的高级索引支持用两个一维数组分别索引多维数组的前两个维度,会自动将对应位置的索引配对(
(1,3)和(2,2)),直接提取每个配对位置的三维元素,最终得到你需要的形状为(2,3)的结果数组。
输出结果
[[ 99. 141. 153.] [121. 185. 158.]]
内容的提问来源于stack exchange,提问作者Romeo Sierra
相关产品推荐
相关产品推荐

