为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Cats萌萌 2023-06-27 17:38:12
考虑两个二维数组,A并且B。import numpy as npA = 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]] 我希望看到一种解决方案,可以轻松扩展到三个二维数组的行的所有组合以形成六列数组,或者四个二维数组的行的所有组合以形成八列数组。
查看完整描述

1 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

使用 numpy 广播并可扩展到任意数量的数组:


r1,c1 = A.shape

r2,c2 = B.shape

arrOut = np.zeros((r1,r2,c1+c2), dtype=A.dtype)

arrOut[:,:,:c1] = A[:,None,:]

arrOut[:,:,c1:] = B

arrOut.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.shape

r2,c2 = B.shape

r3,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:] = A

arrOut.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 循环。


查看完整回答
反对 回复 2023-06-27
  • 1 回答
  • 0 关注
  • 143 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信