Python 合并三个形状相同的NumPy数组
我有一个Python 合并三个形状相同的NumPy数组,python,numpy,multidimensional-array,Python,Numpy,Multidimensional Array,我有一个numpy数组l1的形状(128,128,3)和数据类型np.bool。l1的所有元素都是False。我还有三个数组first\u l2,second\u l2和third\u l2,它们的形状(128,128,1)和数据类型np.bool 我想知道的是如何将first\u l2、second\u l2和third\u l2合并到l1中,这样以前数组的对应元素在l1中有一个函数被调用。如果我正确理解了你的问题,它应该完全符合你的要求:) 例如: array1 = np.array([[T
numpy
数组l1
的形状(128,128,3)
和数据类型np.bool
。l1
的所有元素都是False
。我还有三个数组first\u l2
,second\u l2
和third\u l2
,它们的形状(128,128,1)
和数据类型np.bool
我想知道的是如何将first\u l2
、second\u l2
和third\u l2
合并到l1
中,这样以前数组的对应元素在l1中有一个函数被调用。如果我正确理解了你的问题,它应该完全符合你的要求:)
例如:
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)
希望有帮助!:) 这很有效
l1[:, :, 0] = first_l2[:, :, 0]
l1[:, :, 1] = second_l2[:, :, 0]
l1[:, :, 2] = third_l2[:, :, 0]
要归功于@Holt我建议通过@Holt提出的硬编码方法加入这三个数组
假设您有三个shape(128,128,1)
数组,并且希望将它们组合成一个shape(128,128,3)
数组
要实现这一点,只需将数组传递给串联
函数,如下所示:
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的回答中提出的方法并没有提供预期的结果,因为堆栈
沿着一个新的轴连接数组
In [323]: out3 = np.stack((arr1, arr2, arr3))
In [324]: print(out3.shape)
(3, 128, 128, 1)
只需使用数组切片,l1[:,:,0]=第一个
,l1[:,:,1]=第二个
,等等…@Holt但是有一个问题,l1[:,:,0]
将返回一个形状为(128128)
的数组,但l2的形状为(128128,1)
?在为l2分配或使用另一个切片之前挤压l2。谢谢,l1[:,:,0]=l2[:,:,0]
In [323]: out3 = np.stack((arr1, arr2, arr3))
In [324]: print(out3.shape)
(3, 128, 128, 1)