Python найти значения в numpy массив2 на основе значений в массиве1 - PullRequest
0 голосов
/ 23 апреля 2020

Допустим, у меня есть три массива:

array1 = ['1', '2', '3', '2']
array2 = ['6', '2', '7', '3']
array3 = ['a', 'b', 'c', 'd']

Я хотел бы перебрать каждый элемент в массиве1 и вернуть значение, которое соответствует тогда и только тогда, когда оно находится в массиве2. Другими словами, я хотел бы, чтобы выходные данные были:

array2_in_1 = ['1' '3' '1']

Поскольку «1» отсутствует в массиве 2, поэтому это не учитывается.

«2» находится в первом индекс массива 2, так что индекс записывается как '1'

'3' находится в 3-м индексе массива2, так что он записывается как '3'

'2' записывается снова для первого индекса массива 2, поэтому повторите '1'

Используя эти индексы, я бы затем хотел получить доступ к элементам, основанным на этих индексах, из массива 3:

array3_in_2 = ['b' 'd' 'b']

Используя такие команды, как intersect возвращает только уникальные значения, поэтому любые дубликаты удаляются (что здесь не так).

У меня есть что-то вроде:

vals = []
for i in array1:
    idx = np.where(array2 == i)
    if len(vals) == 0:
        vals = array2[idx]
    else:
        vals = np.concatenate((vals, array2[idx]))

, который дает правильный ответ, но есть ли более pythoni c или более быстрый способ сделать это

1 Ответ

1 голос
/ 24 апреля 2020

Вы можете сделать это без цикла:

def ind():
    array1 = np.array(['1', '2', '3', '2'])
    array2 = np.array(['6', '2', '7', '3'])
    array3 = np.array(['a', 'b', 'c', 'd'])     
    return array3[(array1 == array2[:,np.newaxis]).T.nonzero()[1]]

Результаты:

>>> ind()
array(['b', 'd', 'b'], 
      dtype='<U1')
...