NumPy строка мудрый поиск 1d массив в 2d массив - PullRequest
0 голосов
/ 04 ноября 2019

Скажем, у нас есть массивы x, y, z:

x = np.array([10, 11])

y = np.array([10, 10])

z = np.array([[ 10, 229, 261, 11, 243],
             [  10, 230, 296, 10,  79],
             [  10, 10, 10, 10,  10],
             [  0, 260, 407, 229,  79],
             [  10, 10, 11, 106, 11]])

Мне нужна функция, которая принимает массив x или y и ищет его в z:

myfunc(x, z) # should give following result:
([1, 2, 4], [1, 2, 1])

первый списоквыше - индекс строк в z, где x найден, второй список - количество времени x, произошедшего в каждой строке.

myfunc(y, z) # should give following result:
([0, 4], [1, 2])

Я выполнил поиск похожих вопросов и попытался их реализовать. Но не мог понять, как считать вхождения 1d массива в 2d.

1 Ответ

0 голосов
/ 04 ноября 2019

Хорошо, если вы не заботитесь о порядке ваших переменных внутри x или y, вы можете использовать Counter, чтобы найти количество вхождений и использовать их, чтобы найти минимум вхождений ваших переменных x и y. Что делает его немного запутанным, так это тот факт, что вы можете иметь дубликаты в ваших искомых значениях, поэтому снова используйте Counter, чтобы упростить его. Однако вы не можете использовать счетчик для 2D-массива, поэтому вам нужно перебрать ваш z.

from collections import Counter

def myfunct(x, z):
    occurences_result = []
    rows_result = []

    for row, i in enumerate(z):
        count = Counter(i)
        count_x = Counter(x)
        occurences = [int(count[x_value]/x_occ) for x_value, x_occ in count_x.items() if x_value in count]
        if len(occurences) == len(count_x):
            occurences_result.append(min(occurences))
            rows_result.append(row)
    return((occurences_result, rows_result))

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