假设我有一个5x10x3数组,我将其解释为5个“子数组”,每个子数组由10行和3列组成。我还有一个单独的一维数组,长度为5,我称之为b。
我正在尝试在每个子数组中插入一个新列,其中插入第ith(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])
A [0]应该看起来像:
A [1]应该看起来像:
对于其他“子数组”也是如此。 (注意b [0] = 2和b [1] = 4)
答案 0 :(得分:1)
那呢?
# Make an array B with the same dimensions than A
B = np.tile(b, (1, 10, 1)).transpose(2, 1, 0) # shape: (5, 10, 1)
# Concatenate both
np.concatenate([A, B], axis=-1) # shape: (5, 10, 4)
答案 1 :(得分:0)
一种方法是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.
或者(输入更多但可能更快):
i,j,k = A.shape
res = np.empty((i,j,k+1), np.result_type(A, b))
res[...,:-1] = A
res[...,-1] = b[:, None]
或在dstack
之后的broadcast_to
:
np.dstack([A,np.broadcast_to(b[:,None],A.shape[:2])]