Получить верхние значения N из каждого подматрица из массива 2D numpy [duplicate]

Вы можете написать запрос на объединение DQL, как показано ниже

$em = $this->getContainer()->get('doctrine')->getManager();
$repository = $em->getRepository('YourNamespaceYourBundle:User');
$query = $repository->createQueryBuilder('u')
    ->innerJoin('u.groups', 'g')
    ->where('g.id = :group_id')
    ->setParameter('group_id', 5)
    ->getQuery()->getResult();

. Ваше сопоставление для свойства groups в объекте User будет обрабатывать часть соединения, вам не нужно упоминать таблицу переходов в ваш DQL-запрос

1
задан Divakar 19 December 2016 в 11:30
поделиться

3 ответа

Я бы использовал argsort():

top2_ind = score_matrix.argsort()[:,::-1][:,:2]

То есть создаст массив, содержащий индексы, которые будут сортировать score_matrix:

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

столбцы с ::-1, затем возьмите первые два столбца с :2:

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

Тогда аналогично, но с регулярным np.sort(), чтобы получить значения:

top2_score = np.sort(score_matrix)[:,::-1][:,:2]

Который, следуя той же самой механике, что и выше, дает вам:

array([[ 1. ,  0.4],
       [ 0.8,  0.6],
       [ 0.5,  0.3]])
0
ответ дан John Zwinck 19 August 2018 в 03:03
поделиться

Ниже приведен подход с использованием np.argpartition -

idx = np.argpartition(a,range(M))[:,:-M-1:-1] # topM_ind
out = a[np.arange(a.shape[0])[:,None],idx]    # topM_score

Прогон образца -

In [343]: a
Out[343]: 
array([[ 1. ,  0.3,  0.4],
       [ 0.2,  0.6,  0.8],
       [ 0.1,  0.3,  0.5]])

In [344]: M = 2

In [345]: idx = np.argpartition(a,range(M))[:,:-M-1:-1]

In [346]: idx
Out[346]: 
array([[0, 2],
       [2, 1],
       [2, 1]])

In [347]: a[np.arange(a.shape[0])[:,None],idx]
Out[347]: 
array([[ 1. ,  0.4],
       [ 0.8,  0.6],
       [ 0.5,  0.3]])

Альтернативно, возможно, медленнее, но немного короче код для получения idx будет с np.argsort -

idx = a.argsort(1)[:,:-M-1:-1]

Вот post , содержащий некоторый тест времени выполнения, который сравнивает np.argsort и np.argpartition с подобная проблема.

2
ответ дан Community 19 August 2018 в 03:03
поделиться
1
ответ дан Dutse I 30 October 2018 в 14:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: