矩阵中的numpy 2d argwhere范围,其中a(ij)= a(ji)

时间:2019-07-07 04:40:48

标签: python arrays numpy

我试图在2d numpy数组中查找行和列索引,其中值位于范围内。 虽然我可以使用以下代码完成此操作,但我希望在 ij = a ji 的矩阵中仅遇到一次:


In [118]: test_arr = np.array([[1, 0.2, 0.04], 
     ...:        [0.2, 0.3, 0.06 ], 
     ...:        [0.04, 0.06, 0.09] 
     ...: ]) 
     ...:     

In [119]: test_arr                                                                                                                                                                                                 
Out[119]: 
array([[1.  , 0.2 , 0.04],
       [0.2 , 0.3 , 0.06],
       [0.04, 0.06, 0.09]])

In [120]: np.argwhere((test_arr==0.06))                                                                                                                                                                            
Out[120]: 
array([[1, 2],
       [2, 1]])

有什么方法可以使用numpy来限制i<j,以便输出只能是:

array([[1, 2]])

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

In [38]: In [118]: test_arr = np.array([[1, 0.2, 0.04],  
    ...:      ...:        [0.2, 0.3, 0.06 ],  
    ...:      ...:        [0.04, 0.06, 0.09]  
    ...:      ...: ])                                                                                           
In [39]: test_arr                                                                                               
Out[39]: 
array([[1.  , 0.2 , 0.04],
       [0.2 , 0.3 , 0.06],
       [0.04, 0.06, 0.09]])
In [40]: np.where(test_arr==0.06)                                                                               
Out[40]: (array([1, 2]), array([2, 1]))

让我们探索使用tri函数之一将数组的某些值设置为0:

In [41]: np.tril(test_arr)                                                                                      
Out[41]: 
array([[1.  , 0.  , 0.  ],
       [0.2 , 0.3 , 0.  ],
       [0.04, 0.06, 0.09]])
In [42]: np.triu(test_arr)                                                                                      
Out[42]: 
array([[1.  , 0.2 , 0.04],
       [0.  , 0.3 , 0.06],
       [0.  , 0.  , 0.09]])

现在应用相等性测试:

In [44]: np.triu(test_arr)==0.06                                                                                
Out[44]: 
array([[False, False, False],
       [False, False,  True],
       [False, False, False]])
In [45]: np.argwhere(np.triu(test_arr)==0.06)                                                                   
Out[45]: array([[1, 2]])