numpy 有条件的广播

huus2vyu  于 2023-11-18  发布在  其他
关注(0)|答案(1)|浏览(89)

考虑下面显示的代码。它产生a具有shape (1, 4, 2, 2)b具有shape (4, 1, 2, 2)c广播到shape (4, 4, 2, 2)的数组。  

import numpy as np

a = np.random.randint(0, 10, size=(4, 2, 2))   
b = np.random.randint(0, 10, size=(4, 2, 2))

a = a[np.newaxis, :]
b = b[:, np.newaxis]

c = a+b

字符串

问题:如前所述,c包含162x2数组。但是,我只想要当a沿axis=1的索引沿着axis=0的索引比b沿沿着axis=0的索引时形成的62x2数组。这些将被保存在shape (6, 2, 2)的3d数组中。如何才能做到这一点?  

(the对于greaterlessequal情况,2x2数组计数将是6 + 6 + 4 = 16,这是我的代码片段当前生成的情况)

4zcjmb1e

4zcjmb1e1#

我是这么做的。如果你是对的,我会让你核实数字。

In [225]: a,b
Out[225]: 
(array([[[5, 2],
         [4, 0]],
 
        [[4, 2],
         [3, 1]],
 
        [[2, 9],
         [0, 2]],
 
        [[3, 6],
         [1, 6]]]),
 array([[[4, 9],
         [4, 4]],
 
        [[1, 5],
         [6, 3]],
 
        [[8, 2],
         [3, 2]],
 
        [[6, 3],
         [9, 2]]]))

字符串
6个较低的三指数:

In [226]: I,J = np.tril_indices(4,-1); I,J
Out[226]: (array([1, 2, 2, 3, 3, 3]), array([0, 0, 1, 0, 1, 2]))


高级索引:

In [227]: a[I,:,:]+b[J,:,:]
Out[227]: 
array([[[ 8, 11],
        [ 7,  5]],

       [[ 6, 18],
        [ 4,  6]],

       [[ 3, 14],
        [ 6,  5]],

       [[ 7, 15],
        [ 5, 10]],

       [[ 4, 11],
        [ 7,  9]],

       [[11,  8],
        [ 4,  8]]])

相关问题