如何使用另一Numpy矩阵对三维图像Numpy数组实现索引取值
可以实现,直接使用Numpy的高级整数索引即可满足需求,具体实现方式如下:
实现代码
import numpy as np # 构造输入数组a(2*2*3的三维RGB数组) a = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]]) # 构造索引矩阵b(每个位置存储目标像素的[行, 列]坐标) b = np.array([[[1,0],[0,1]],[[1,1],[0,1]]]) # 按b的索引取值:拆分b的最后一维分别作为a的第0维、第1维索引 output = a[b[..., 0], b[..., 1]] print(output)
运行后输出结果和要求的完全一致:
[[[ 7 8 9] [ 4 5 6]] [[10 11 12] [ 4 5 6]]]
原理解释
索引数组b的维度为2*2*2,每个坐标(i,j)位置存储的是要从a中取值的目标坐标[target_row, target_col]:
b[..., 0]提取所有位置的目标行索引,维度为2*2b[..., 1]提取所有位置的目标列索引,维度为2*2
Numpy进行高级索引时,会逐位置匹配两个索引数组的对应值,从a中取出对应坐标的RGB像素值,最终返回的结果维度为2*2*3,刚好符合输出要求。
内容的提问来源于stack exchange,提问作者Thompson Liu
相关产品推荐
相关产品推荐

