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

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

Сообщение Anonymous »

Следующий код работает, но во втором случае он ужасно неэффективен, поскольку i преобразуется в полноценный массив, увеличивая использование памяти и время выполнения.

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

import numpy as np

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

# slice based on indices
s = slice(2, None)
print(arr[s])

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

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

[      20       30       40       50 29999999]
[      20       30       40       50 29999999]
Есть ли функция numpy, позволяющая улучшить это напрямую? Должен ли я использовать np.where вместо этого с обратным вызовом с использованием среза (который, похоже, тоже может быть медленным, возвращаясь от C++ к Python для каждого отдельного элемента [или он не будет этого делать?])? Или я упускаю гораздо лучший способ?

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

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

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

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

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

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

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