Есть ли функция Numpy для подмножества массива на основе значений (а не индексов) в срезе или диапазоне?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Есть ли функция Numpy для подмножества массива на основе значений (а не индексов) в срезе или диапазоне?

Сообщение Anonymous »

Я пытаюсь извлечь из массива все значения в определенном фрагменте (что-то вроде диапазона, но с необязательным началом, остановкой и шагом< /код>). И при этом я хочу извлечь выгоду из тяжелой оптимизации, которую объекты range используют для range.__contains__(), что означает, что им никогда не нужно создавать экземпляр всего диапазона значений (сравните Почему «1000000000000000 в диапазоне(1000000000000001)» так быстро в Python 3?).
Следующий код работает, но он ужасно неэффективен, потому что i преобразуется в полноценный массив , увеличивая использование памяти и время выполнения.

Код: Выделить всё

import numpy as np

arr = np.array([0, 20, 29999999, 10, 30, 40, 50])
M = np.max(arr)

# slice based on values
s = slice(20, None)
i = range(*s.indices(M + 1))
print(arr[np.isin(arr, i)])  # works, but inefficient!
Выход:

Код: Выделить всё

[      20 29999999       30       40       50]
Есть ли функция numpy, позволяющая улучшить это напрямую? Должен ли я использовать np.vectorize/

Код: Выделить всё

np.where
вместо этого с обратным вызовом с использованием среза (кажется, что возврат от C++ к Python для каждого отдельного элемента тоже может быть медленным [или это не будет делать?])? Должен ли я вычесть start из своих значений, разделить на шаг, а затем посмотреть, равны ли значения >= 0 && < (stop - start)/step? Или я упускаю гораздо лучший способ?

Подробнее здесь: https://stackoverflow.com/questions/786 ... dices-in-a
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»