How to create a 2D array from a 1D array and a 3D array:

问题描述 投票:0回答:1

我正在尝试从 1D 数组和 3D 数组创建 2D 数组:

pr = np.array([100, 50, 20]).reshape(-1,1)

3D数组:

arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [9, 10, 11]], [[12, 13, 14], [15, 16, 17]]])

我可以手动执行任务,如下所示:

pr = np.array([100, 50, 20]).reshape(-1,1)
arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [9, 10, 11]], [[12, 13, 14], [15, 16, 17]]])

po = arr[0,:,:].flatten().reshape(-1,1)

p1 = np.vstack([pr[0]]*po.size)
p2 = np.vstack([pr[1]]*po.size)
p3 = np.vstack([pr[2]]*po.size)

p_arr = np.vstack((p1,p2,p3))

arr_1 = arr.flatten().reshape(-1,1)

data = np.hstack((p_arr,arr_1))

这种方法意味着,只要“pr”的大小发生变化,我就必须更新代码。请有没有更好的方法来做到这一点,当“pr”的大小发生变化时不需要我更新代码

python arrays numpy-ndarray
1个回答
0
投票

可以手动把

pr
广播成和
arr
一样的形状,然后按列堆叠:

>>> pr = np.array([100, 50, 20])
>>> arr = np.array([[[1, 2, 3],
...                  [4, 5, 6]],
...                 [[7, 8, 9], 
...                  [9, 10, 11]],
...                 [[12, 13, 14],
...                  [15, 16, 17]]])
>>> np.column_stack([np.broadcast_to(pr[:, None, None], arr.shape).ravel(),
...                  arr.ravel()])
array([[100,   1],
       [100,   2],
       [100,   3],
       [100,   4],
       [100,   5],
       [100,   6],
       [ 50,   7],
       [ 50,   8],
       [ 50,   9],
       [ 50,   9],
       [ 50,  10],
       [ 50,  11],
       [ 20,  12],
       [ 20,  13],
       [ 20,  14],
       [ 20,  15],
       [ 20,  16],
       [ 20,  17]])
© www.soinside.com 2019 - 2024. All rights reserved.