猿问

如何组合两个 numpy 数组,以便对于第一个数组的每一行,我附加第二个数组中的所有行?

我有以下 numpy 数组:


theta_array =

array([[ 1, 10],

       [ 1, 11],

       [ 1, 12],

       [ 1, 13],

       [ 1, 14],

       [ 2, 10],

       [ 2, 11],

       [ 2, 12],

       [ 2, 13],

       [ 2, 14],

       [ 3, 10],

       [ 3, 11],

       [ 3, 12],

       [ 3, 13],

       [ 3, 14],

       [ 4, 10],

       [ 4, 11],

       [ 4, 12],

       [ 4, 13],

       [ 4, 14]])


XY_array  = 

array([[ 44.0394952 , 505.81099922],

       [ 61.03882938, 515.97253226],

       [ 26.69851841, 525.18083012],

       [ 46.78487831, 533.42309602],

       [ 45.77188401, 545.42988355],

       [ 81.12969132, 554.78767379],

       [ 54.178463  , 565.8716283 ],

       [ 41.58952084, 574.76827133],

       [ 85.24956815, 585.1355127 ],

       [ 80.73726733, 595.49446033],

       [ 22.70625059, 605.59017175],

       [ 40.66810604, 615.26308629],

       [ 47.16694695, 624.39222332],

       [ 48.72499541, 633.19846364],

       [ 50.68589921, 643.72334885],

       [ 38.42731134, 654.68595883],

       [ 47.39519707, 666.28232866],

       [ 58.07767155, 673.9572227 ],

       [ 72.11393347, 683.68307373],

       [ 53.70872932, 694.65509894],

       [ 82.08237952, 704.5868817 ],

       [ 46.64069738, 715.18427515],

       [ 40.46032478, 723.91308011],

       [ 75.69090892, 733.69595658],

       [120.61447884, 745.31322786],

       [ 60.17764744, 754.89747186],

       [ 87.15961973, 766.24040447],

       [ 82.93872713, 773.01518252],

       [ 93.56688906, 785.60640153],

       [ 70.0474047 , 793.81792947],

       [104.3613818 , 805.40234676],

       [108.39253837, 814.75002114],

       [ 78.97643673, 824.95386427],

       [ 85.69096895, 834.44797862],

       [ 53.07112931, 844.39555058],

       [111.49875807, 855.660508  ],

       [ 70.88824958, 865.53417489],

       [ 79.55499469, 875.31303945],

       [ 60.86941464, 885.85235946],

       [101.06017712, 896.69986636],

       [ 74.55823544, 905.87417231],

       [113.24705653, 915.19350121],

       [ 94.21920882, 925.87933273],


我试图将两者结合起来,因此对于 theta_array 的每个组合,我从 XY_array 获取所有组合。

在 numpy 中进行这种组合/聚合的方式是什么?



梦里花落0921
浏览 123回答 3
3回答

浮云间

meshgrid您可以在使用with后对“列”重新排序[:,[0,2,1,3]],如果由于列数较多而需要使列表动态化,那么您可以看到我答案的结尾:np.array(np.meshgrid(theta_array, XY_array)).T.reshape(-1,4)[:,[0,2,1,3]]输出:array([[  1.        ,   1.        ,  44.0394952 , 505.81099922]],       [[  1.        ,   1.        ,  61.03882938, 515.97253226]],       [[  1.        ,   1.        ,  26.69851841, 525.18083012]],       ...,       [[ 14.        ,  14.        ,  73.86032436, 973.91032818]],       [[ 14.        ,  14.        , 103.96923524, 984.24366761]],       [[ 14.        ,  14.        ,  93.20663129, 995.44618851]])如果您有很多列,您可以动态创建此列表:[0,2,1,3]使用列表理解。例如:n = new_arr.shape[1]*2lst = [x for x in range(n) if x % 2 == 0][lst.append(z) for z in [y for y in range(n) if y % 2 == 1]]lst[0, 2, 4, 6, 1, 3, 5, 7]然后,您可以重写为:np.array(np.meshgrid(theta_array, XY_array)).T.reshape(-1,4)[:,lst]

哆啦的时光机

您可以使用itertools.product:out = np.array([*product(theta_array, XY_array)])out = out.reshape(out.shape[0],-1)输出:array([[  1.        ,  10.        ,  44.0394952 , 505.81099922],       [  1.        ,  10.        ,  61.03882938, 515.97253226],       [  1.        ,  10.        ,  26.69851841, 525.18083012],       ...,       [  4.        ,  14.        ,  73.86032436, 973.91032818],       [  4.        ,  14.        , 103.96923524, 984.24366761],       [  4.        ,  14.        ,  93.20663129, 995.44618851]])也就是说,这看起来非常像XY 问题。你想用这个数组做什么?

鸿蒙传说

正如此处的侧面/补充参考一样,我们对两种解决方案的执行时间进行了比较。完成此特定操作itertools所需的时间比同等操作多 10 倍numpy。%%timefor i in range(1000):        z = np.array(np.meshgrid(theta_array, XY_array)).T.reshape(-1,4)[:,[0,2,1,3]]CPU times: user 299 ms, sys: 0 ns, total: 299 msWall time: 328 ms%%timefor i in range(1000):        z = np.array([*product(theta_array, XY_array)])        z = z.reshape(z.shape[0],-1)CPU times: user 2.79 s, sys: 474 µs, total: 2.79 sWall time: 2.84 s
随时随地看视频慕课网APP

相关分类

Python
我要回答