Python NumPy:将一维阵列连接到三维阵列
假设我有一个5x10x3数组,我将其解释为5个“子数组”,每个由10行和3列组成。我还有一个单独的1D数组,长度为5,我称之为b 我试图在每个子数组中插入一个新列,其中插入第I(I=0,1,2,3,4)个子数组的列是一个10x1向量,其中每个元素等于b[I] 例如:Python NumPy:将一维阵列连接到三维阵列,python,numpy,Python,Numpy,假设我有一个5x10x3数组,我将其解释为5个“子数组”,每个由10行和3列组成。我还有一个单独的1D数组,长度为5,我称之为b 我试图在每个子数组中插入一个新列,其中插入第I(I=0,1,2,3,4)个子数组的列是一个10x1向量,其中每个元素等于b[I] 例如: import numpy as np np.random.seed(777) A = np.random.rand(5,10,3) b = np.array([2,4,6,8,10]) [0]的外观应类似于: [1]应该是这样的
import numpy as np
np.random.seed(777)
A = np.random.rand(5,10,3)
b = np.array([2,4,6,8,10])
[0]的外观应类似于:
[1]应该是这样的:
对于其他“子阵列”也是如此。
(注意b[0]=2和b[1]=4)这个呢
#制作一个与A尺寸相同的数组B
B=np.tile(B,(1,10,1)).转置(2,1,0)#形状:(5,10,1)
#连接两者
np.连接([A,B],轴=-1)#形状:(5,10,4)
一种方法是np.pad
:
np.pad(A, ((0,0),(0,0),(0,1)), 'constant', constant_values=[[[],[]],[[],[]],[[],b[:, None,None]]])
# array([[[9.36513084e-01, 5.33199169e-01, 1.66763960e-02, 2.00000000e+00],
# [9.79060284e-02, 2.17614285e-02, 4.72452812e-01, 2.00000000e+00],
# etc.
或者(输入更多,但可能更快):
或广播到后的dstack
:
np.dstack([A,np.broadcast_to(b[:,None],A.shape[:2])]
np.dstack([A,np.broadcast_to(b[:,None],A.shape[:2])]