如何将形状为(3,n,m)的3D numpy数组转换为(r,g,b)格式元组列表
解决方案
核心思路是先调整数组轴顺序,将RGB通道维度移到最后,再展平空间维度,最后逐行转换为元组即可得到目标结果。
分步实现代码
import numpy as np arr = np.array( [[[0, 1], [2, 3]], [[4, 5], [6, 7]], [[8, 9], [10,11]]] ) # 1. 调整轴顺序,从(通道, 行, 列)转为(行, 列, 通道) transposed_arr = arr.transpose(1, 2, 0) # 2. 展平行和列维度,得到形状为(n*m, 3)的二维数组 flattened_arr = transposed_arr.reshape(-1, 3) # 3. 逐行转为元组,最终得到列表 result = [tuple(row) for row in flattened_arr] print(result)
运行输出:
[(0, 4, 8), (1, 5, 9), (2, 6, 10), (3, 7, 11)]
简洁单行写法
result = list(map(tuple, arr.transpose(1, 2, 0).reshape(-1, 3)))
说明:默认reshape使用行优先(C风格)的顺序展开,刚好匹配示例的预期输出顺序,如果需要列优先展开,可以给reshape添加参数
order='F'。
内容的提问来源于stack exchange,提问作者ryoung9898
相关产品推荐
相关产品推荐

