将二维 numpy 数组的按行组合连接成二维数组

考虑两个二维数组,A并且B。


import numpy as np


A = np.array([[1, 4],

              [3, 5],

              [1, 2]])


B = np.array([[2, 3],

              [1, 3]])

我想构建一个数组arrOut,给出4 列数组中的行A和行的所有组合。B


期望的输出是:


arrOut = [[1, 4, 2, 3],

          [1, 4, 1, 3],

          [3, 5, 2, 3],

          [3, 5, 1, 3],

          [1, 2, 2, 3],

          [1, 2, 1, 3]] 

我希望看到一种解决方案,可以轻松扩展到三个二维数组的行的所有组合以形成六列数组,或者四个二维数组的行的所有组合以形成八列数组。


Cats萌萌
浏览 144回答 1
1回答

Smart猫小萌

使用 numpy 广播并可扩展到任意数量的数组:r1,c1 = A.shaper2,c2 = B.shapearrOut = np.zeros((r1,r2,c1+c2), dtype=A.dtype)arrOut[:,:,:c1] = A[:,None,:]arrOut[:,:,c1:] = BarrOut.reshape(-1,c1+c2)输出:[[1 4 2 3] [1 4 1 3] [3 5 2 3] [3 5 1 3] [1 2 2 3] [1 2 1 3]]对于 3 数组的情况(这里我使用了 (A,B,A)):r1,c1 = A.shaper2,c2 = B.shaper3,c3 = A.shape arrOut = np.zeros((r1,r2,r3,c1+c2+c3), dtype=A.dtype)arrOut[:,:,:,:c1] = A[:,None,None,:]arrOut[:,:,:,c1:c1+c2] = B[:,None,:]arrOut[:,:,:,c1+c2:] = AarrOut.reshape(-1,c1+c2+c3)输出:[[1 4 2 3 1 4] [1 4 2 3 3 5] [1 4 2 3 1 2] [1 4 1 3 1 4] [1 4 1 3 3 5] [1 4 1 3 1 2] [3 5 2 3 1 4] [3 5 2 3 3 5] [3 5 2 3 1 2] [3 5 1 3 1 4] [3 5 1 3 3 5] [3 5 1 3 1 2] [1 2 2 3 1 4] [1 2 2 3 3 5] [1 2 2 3 1 2] [1 2 1 3 1 4] [1 2 1 3 3 5] [1 2 1 3 1 2]]您甚至可以为 N 数组情况创建一个 for 循环。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python