从两个1D向量a、b创建布尔数组a,如果a[i]==b[j],则a[i,j]为真

2024-04-25 05:25:26 发布

您现在位置:Python中文网/ 问答频道 /正文

给定两个numpy向量ab,我想创建一个2D数组AA[i,j]=True如果a[i]==b[j]。我可以为循环执行以下操作。但是我想知道我是否可以不用for循环来更快地得到结果

def f(x, y):
    d = np.zeros((len(x),len(y)))
    for i in range(len(x)):
        d[i, np.argwhere(y==x[i])]=1
    return d
a = np.array([1,2,3,1,3,4])
b = np.array([1,1,2,2,2,3,4,5])

而{}是:

array([[1., 1., 0., 0., 0., 0., 0., 0.],
       [0., 0., 1., 1., 1., 0., 0., 0.],
       [0., 0., 0., 0., 0., 1., 0., 0.],
       [1., 1., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 1., 0., 0.],
       [0., 0., 0., 0., 0., 0., 1., 0.]])

Tags: innumpytrueforlenreturndefnp
1条回答
网友
1楼 · 发布于 2024-04-25 05:25:26
In [296]: a = np.array([1,2,3,1,3,4]) 
     ...: b = np.array([1,1,2,2,2,3,4,5])                                       
In [297]: a[:,None]==b                                                          
Out[297]: 
array([[ True,  True, False, False, False, False, False, False],
       [False, False,  True,  True,  True, False, False, False],
       [False, False, False, False, False,  True, False, False],
       [ True,  True, False, False, False, False, False, False],
       [False, False, False, False, False,  True, False, False],
       [False, False, False, False, False, False,  True, False]])
In [298]: _.astype(int)                                                         
Out[298]: 
array([[1, 1, 0, 0, 0, 0, 0, 0],
       [0, 0, 1, 1, 1, 0, 0, 0],
       [0, 0, 0, 0, 0, 1, 0, 0],
       [1, 1, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 1, 0, 0],
       [0, 0, 0, 0, 0, 0, 1, 0]])

或与where一起:

In [301]: d=np.zeros((len(a),len(b)),int)                                       
In [302]: np.where(a[:,None]==b)                                                
Out[302]: (array([0, 0, 1, 1, 1, 2, 3, 3, 4, 5]), array([0, 1, 2, 3, 4, 5, 0, 1, 5, 6]))
In [303]: d[_]=1                                                                
In [304]: d                                                                     
Out[304]: 
array([[1, 1, 0, 0, 0, 0, 0, 0],
       [0, 0, 1, 1, 1, 0, 0, 0],
       [0, 0, 0, 0, 0, 1, 0, 0],
       [1, 1, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 1, 0, 0],
       [0, 0, 0, 0, 0, 0, 1, 0]])

相关问题 更多 >