如何将三个(128,128,1)的NumPy bool数组合并到(128,128,3)数组?
解决方案
嘿,这个问题其实挺容易解决的,咱们用NumPy的数组操作就能轻松把三个单通道数组合并到l1的对应通道里,保证顺序完全正确~
方法一:逐个通道直接赋值
这种方法直观易懂,直接针对l1的每个通道进行赋值操作,因为每个_l2数组的形状是(128,128,1),刚好和l1的单个通道切片形状匹配:
import numpy as np # 假设你已经初始化好了这些数组 l1 = np.zeros((128, 128, 3), dtype=np.bool_) first_l2 = np.random.randint(0, 2, (128, 128, 1), dtype=np.bool_) second_l2 = np.random.randint(0, 2, (128, 128, 1), dtype=np.bool_) third_l2 = np.random.randint(0, 2, (128, 128, 1), dtype=np.bool_) # 按顺序给l1的三个通道赋值 l1[..., 0:1] = first_l2 # 给第0个通道赋值 l1[..., 1:2] = second_l2 # 给第1个通道赋值 l1[..., 2:3] = third_l2 # 给第2个通道赋值
这里的...是NumPy里的省略号索引,代表前面所有的维度(也就是128x128的空间维度),0:1这种切片写法能保证和_l2数组的(128,128,1)形状完全匹配,避免维度不兼容的问题。你也可以简化成l1[..., 0] = first_l2[..., 0],效果是一样的——因为NumPy会自动进行维度广播。
方法二:一次性拼接后赋值
如果你想更简洁地完成操作,可以用np.concatenate把三个单通道数组在**通道维度(axis=2)**上拼接成一个(128,128,3)的数组,再直接赋值给l1:
# 在通道维度(第三个维度)拼接三个数组 combined_array = np.concatenate([first_l2, second_l2, third_l2], axis=2) # 将拼接好的数组赋值给l1 l1[:] = combined_array
这种方法一步到位,能严格保证三个数组的顺序和l1的通道顺序完全对应:first_l2对应l1的第0通道,second_l2对应第1通道,third_l2对应第2通道。
两种方法都能完美实现你的需求,选哪种全看你的习惯~
内容的提问来源于stack exchange,提问作者Vajira Prabuddhaka
相关产品推荐
相关产品推荐

