我对numpy中的数组有一个非常基本的问题,但我找不到快速的方法来做到这一点。我有三个具有相同尺寸的2D阵列A,B,C。我想在一个3D数组(D)中转换它们,其中每个元素都是一个数组
D[column][row] = [A[column][row] B[column][row] c[column][row]]
最好的方法是什么?
答案 0 :(得分:12)
您可以使用numpy.dstack:
>>> import numpy as np
>>> a = np.random.random((11, 13))
>>> b = np.random.random((11, 13))
>>> c = np.random.random((11, 13))
>>>
>>> d = np.dstack([a,b,c])
>>>
>>> d.shape
(11, 13, 3)
>>>
>>> a[1,5], b[1,5], c[1,5]
(0.92522736614222956, 0.64294050918477097, 0.28230222357027068)
>>> d[1,5]
array([ 0.92522737, 0.64294051, 0.28230222])
答案 1 :(得分:5)
numpy.dstack沿第三轴堆叠数组,因此,如果堆叠形状为a
的3个数组(b
,c
,(N,M)
),你最终会得到一个形状为(N,M,3)
的数组。
另一种方法是直接使用:
np.array([a, b, c])
这会给你一个(3,N,M)
数组。
两者之间的区别是什么?内存布局。您将以
的身份访问您的第一个数组a
np.dstack([a,b,c])[...,0]
或
np.array([a,b,c])[0]