Как улучшить фрагмент кода, получая индексы на основе condidion?

#list #performance #numpy #loops #optimization

#Список #Производительность #numpy #циклы #оптимизация

Вопрос:

Я хотел бы получить индексы элементов в списке на основе условия. В большинстве случаев это можно сделать с np.where помощью . Однако, как только условия усложняются, все становится беспорядочным.

В моем случае условие простое: элемент также существует во втором списке. Как я мог бы написать это эффективно? Я включил пример кода, который работает, но работает медленно из-за цикла for и добавления к списку. Если возможно, я хотел бы избавиться от обоих и иметь работоспособный код. У кого-нибудь есть идея, как это можно сделать?

 import numpy as np

A = np.random.randint(4, size=20)
B = [0, 1, 2]
indices = list()
N = len(A)
for i in range(N):
    if A[i] in B:
        indices.append(i)
 

Ответ №1:

Это самое быстрое, что я мог сделать

 [indices.append(i) for i in range(N) if A[i] in B]
 

Это заняло

 Program Executed in 0.000104600000000010
 

Ваш взял

 Program Executed in 0.000138000000000027