Какой самый быстрый способ извлечения индексов не "-1" из массива? - PullRequest
0 голосов
/ 09 марта 2019

У меня есть массив с размером 1500 x 3300. Я хочу получить индексы всех значений, которые имеют значение больше 0,40.

Например, подмассив:

a = [0,0.5,0.4,-1,-1,0.9,0.3,-1,0.7]

Желаемый результат: [0,1,5,8]

Я написал следующий код, но для его запуска требуется много времени. Работа с массивом размером 1500 x 3300 занимает 20 минут.

def non_zero(lst):
    """ return indexes of items which are not -1 and value is greater than 0.40 """
    return [i for i, e in enumerate(lst) if e > 0.40]

Какая самая быстрая альтернатива для этого?

Ответы [ 3 ]

0 голосов
/ 09 марта 2019

Попробуйте выполнить следующее непосредственно в 2D-массиве:

i, j = np.where(np.array(lst) > 0.4)
0 голосов
/ 09 марта 2019

Вы можете использовать np.argwhere для получения индексов.

import numpy as np
idx = np.argwhere(a != -1 & a > 0.4)

И, конечно же, a! = -1 не обязательно ..

0 голосов
/ 09 марта 2019
import numpy as np    
np.where(np.array(a) > 0.40)[0].tolist()

значения> 0,40, конечно,> -1

Также я полагаю, что " a " - это список чисел (не список списков)

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