Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 合并三个形状相同的NumPy数组_Python_Numpy_Multidimensional Array - Fatal编程技术网

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)