我有一个numpy
数组l1
,形状为(128, 128, 3)
,数据类型为np.bool
。 l1
的所有元素均为False
。我还有三个first_l2
,second_l2
和third_l2
形状(128, 128, 1)
和数据类型np.bool
。
我想知道的是如何将first_l2
,second_l2
和third_l2
合并到l1
中,以便前面数组的相应元素在{{{}}内的顺序正确1}}。
答案 0 :(得分:1)
numpy 中有一个名为stack的函数。如果我理解你的问题,它应该完全符合你的要求:)
例如:
array1 = np.array([[True, True],[False, False]])
array2 = np.array([[False, False],[True, True]])
array3 = np.array([[False, True],[True, False]])
现在你堆叠它们:
stacked = np.stack((array1, array2, array3))
stacked
> array([[[True, True],[False, False]],
[[False, False],[True, True]],
[[False, True],[True, False]]])
stacked.shape
> (3, 2, 2)
希望它有所帮助! :)
答案 1 :(得分:1)
我建议通过concatenate
加入三个阵列,而不是@Holt提出的硬编码方法。
我们假设您有三个形状(128, 128, 1)
数组,并且您希望将它们组合成一个形状为(128, 128, 3)
的单个数组。
In [313]: import numpy as np
In [314]: arr1 = np.random.random(size=(128, 128, 1))
In [315]: arr2 = np.random.random(size=(128, 128, 1))
In [316]: arr3 = np.random.random(size=(128, 128, 1)
要实现这一点,您只需将数组传递给concatenate
函数,如下所示:
In [317]: out1 = np.concatenate((arr1, arr2, arr3), axis=-1)
硬编码方法会产生相同的结果,但它更详细,必须明确分配结果数组:
In [318]: out2 = np.empty(shape=(128, 128, 3))
In [319]: out2[:, :, 0] = arr1[:, :, 0]
In [320]: out2[:, :, 1] = arr2[:, :, 0]
In [321]: out2[:, :, 2] = arr3[:, :, 0]
In [322]: print(np.all(out1 == out2))
True
应该注意的是@Lauro Bravar的答案中提出的方法没有提供预期的结果,因为stack
沿着新轴连接数组。
In [323]: out3 = np.stack((arr1, arr2, arr3))
In [324]: print(out3.shape)
(3, 128, 128, 1)
答案 2 :(得分:0)
这有效,
l1[:, :, 0] = first_l2[:, :, 0]
l1[:, :, 1] = second_l2[:, :, 0]
l1[:, :, 2] = third_l2[:, :, 0]
归功于@Holt