我有第一个2D数组,它表示空间点的位置。让我们把它命名为A。我的第一个数组的形状为(N,2),其中N表示空间点的数量,2对应于变量x和y。然后,我有第二个2D数组,对应于形状为(T,3)的时间序列B,其中T是时间步长的数量,3对应于时间t和另外两个变量,我将命名为y1,y2。我想要的是构建一个形状为(N,T,2 + 3)的3D数组C,它将每个空间点与第二个数组B相关联,使得C具有以下列:(x,y,t,yi,y2)或(t,yi,y2,x,y)。我可以通过循环来做,但是对于大数据,它变得不有效。你有更有效的方法吗?下面是一个例子:
A = np.array([
[1, 2],
[3, 4]
])
B = np.array([
[-1, -1],
[-2, -2],
[-3, -3]
])
C = np.zeros((2, 3, 4))
for j in range(2):
C[j, :, :2] = np.tile(A[j:j + 1, :], (3, 1))
C[j, :, 2:] = B
print(A)
print(B)
print(C)
输出:
A
[[1 2]
[3 4]]
B
[[-1 -1]
[-2 -2]
[-3 -3]]
C
[[[ 1. 2. -1. -1.]
[ 1. 2. -2. -2.]
[ 1. 2. -3. -3.]]
[[ 3. 4. -1. -1.]
[ 3. 4. -2. -2.]
[ 3. 4. -3. -3.]]]
1条答案
按热度按时间xnifntxz1#
NumPy广播!
首先,你需要重塑A和B,使它们可以一起广播。您可以通过向A和B添加新轴来实现这一点:
现在,您可以使用NumPy广播来合并重新整形的A和B数组,然后沿着最后一个轴连接广播的数组。
输出将是预期结果: