我正在尝试从 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”的大小发生变化时不需要我更新代码
可以手动把
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]])