подсчет количества дубликатов для каждой строки двумерного массива - PullRequest
0 голосов
/ 07 ноября 2018

Есть ли в python простой способ проверить количество дубликатов в разных строках. Например:

Row1: 12  13  20  25  45  46  
Row2: 14  24  30  38  39  47  
Row3:  1   9  15  21  29  39  
Row4:  2   6  14  19  26  45  
Row5:  5  23  25  27  32  40  
Row6:  6   8  25  26  27  45  

Я хочу сравнить Row6 с предыдущими "n" строками. Если n = 5, то результат должен быть примерно таким: [2 0 0 3 2]

Конечно, я могу сравнить каждое значение в строке 6 с каждым значением из другой строки в цикле и увеличить счетчик для каждой строки.

Но знаете ли вы уже существующую функцию в python?

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Если вы работаете с пустыми массивами, используйте транслированное сравнение,

>>> n = 5
>>> v = df.values 
>>> v
array([[12, 13, 20, 25, 45, 46],
       [14, 24, 30, 38, 39, 47],
       [ 1,  9, 15, 21, 29, 39],
       [ 2,  6, 14, 19, 26, 45],
       [ 5, 23, 25, 27, 32, 40],
       [ 6,  8, 25, 26, 27, 45]])
>>> (v[None, -(n+1):-1, None] == v[-1, :, None]).sum(-1).sum(-1).squeeze()
array([2, 0, 0, 3, 2])
0 голосов
/ 07 ноября 2018

Вы можете использовать уникальный от numpy

>>> import numpy as np 
>>> np.unique([1, 1, 2, 2, 3, 3])
array([1, 2, 3])
>>> a = np.array([[1, 1], [2, 3]])
>>> np.unique(a)
array([1, 2, 3])

Вам по-прежнему нужно перебрать n строк, а затем проверить длину полученного массива. Может быть, вы найдете что-то более подходящее, все еще используя numpy.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...