numpy 2d argwhere диапазон в матрице, где a (ij) = a (ji) - PullRequest
0 голосов
/ 07 июля 2019

Я пытаюсь найти индекс строки и столбца в двумерном массиве, где значение лежит в диапазоне. Хотя я могу сделать это с помощью следующего кода, я хотел бы, чтобы в матрице встречалось только одно вхождение, где a 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 голосов
/ 07 июля 2019
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]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...