合并三个相同形状的NumPy数组

时间:2018-04-08 13:43:21

标签: python numpy multidimensional-array

我有一个numpy数组l1,形状为(128, 128, 3),数据类型为np.booll1的所有元素均为False。我还有三个first_l2second_l2third_l2形状(128, 128, 1)和数据类型np.bool

我想知道的是如何将first_l2second_l2third_l2合并到l1中,以便前面数组的相应元素在{{{}}内的顺序正确1}}。

3 个答案:

答案 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