我用Python 3.6编写,使用Numpy 1.20.1。问题是,我有一个np.ndarray
,叫做A
,大小为(10, 3)
,还有一个np.ndarray
,叫做B
,大小为(4, 3)
。对于大小为3的4个数组,我想将它们放在第一个数组中的4个特定位置。
例如:
A = np.zeros((10, 3))
B = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
idx = [7,3,1,4]
我想把B
到A
中的每一行按idx的顺序排列。所以转换后,A
应该看起来像:
[0, 0, 0],
[7, 8, 9],
[0, 0, 0],
[4, 5, 6],
[10, 11, 12],
[0, 0, 0],
[0, 0 ,0],
[1, 2, 3],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0].
我特别想知道是否有可能在一行代码中完成这一点。
我尝试了A[idx] = B
,它给了我错误:IndexError: too many indices for array
Numpy版本一行。
A = np.zeros((10, 3))
B = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
idx = [7,3,1,4]
A[idx] = B[ np.arange(B.shape[0]) ] # Source from B.shape
或
a[idx] = B[[0,1,2,3]] # Source as constants
你的代码对我来说工作得很好。
对于这个问题,你可以试试:
for i, row in zip(idx, B):
A[i] = row