У меня есть вектор g
значений длины 1024 и меньшего вектора f
размера 32, определяющего границы бинов. v
и f
сортируются по возрастанию. Я хочу вернуть массив векторов i.e [v_1,v_2,v_3,...]
длиной len(f)
, так что каждый вектор v_i
содержит индексы g
между f_i
и f_i + 1
. Есть ли способ NumPy делать такую вещь, которая не включает цикл?numpy binning: как получить индексы массива, удовлетворяющие предикату
0
A
ответ
1
Вы можете использовать searchsorted
найти отсортированный позиции f
в g
. Они дают нижние и верхние границы диапазонов, которые вы хотите:
Например,
In [42]: g
Out[42]:
array([ 1, 11, 19, 20, 21, 32, 36, 41, 47, 53, 54, 55, 65, 66, 69, 74, 76,
87, 89, 94])
In [43]: f
Out[43]: [0, 10, 20, 50, 100]
In [44]: binedges = g.searchsorted(f)
In [45]: binedges
Out[45]: array([ 0, 1, 3, 9, 20])
Массив binedges
дает вам всю информацию, что вам нужно: диапазон индексов для бен k
является range(binedges[k], binedges[k+1])
.
Вот как вы можете создать явный список индексов в каждом бине:
In [46]: rngs = [list(range(binedges[k], binedges[k+1])) for k in range(len(binedges)-1)]
In [47]: rngs
Out[47]: [[0], [1, 2], [3, 4, 5, 6, 7, 8], [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]]
0
Первые вещи сначала:
import numpy as np
скажем, у вас есть ваши данные g
:
g = sorted((1e3 * np.random.random(1024)).astype(int))
и ваши контейнеры f
:
f = sorted((1e3 * np.random.random(32)).astype(int))
вы можете использовать numpy.digitize
, которые возвращают индексы bin в f
, где eac ч элемент g
принадлежит:
dg = np.digitize(g,f)
Результирующий вектор собирается содержит список различных размеров, так что вы можете хранить это список:
for i in range(len(f)): v.append(np.argwhere(dg == i))
Смежные вопросы
- 1. Как получить индексы недиагональных элементов массива numpy?
- 2. Массив Numpy, как выбрать индексы, удовлетворяющие нескольким условиям?
- 3. Извлечение индексы массива NumPy
- 4. Binning in Numpy
- 5. Numpy: binning boolean data
- 6. Условного NumPy модификации массива индексы
- 7. Добавить Смещение Индексы Numpy массива
- 8. Как найти индексы переупорядоченного массива numpy?
- 9. Как получить индексы значений Numpy массива, которые равны нулю
- 10. Получить индексы для всех элементов массива в numpy
- 11. Сортировка ненулевых элементов Numpy массива и получить их индексы
- 12. Получить индексы Numpy 1d массива, где значение больше предыдущего элемента
- 13. Преобразование массива numpy из значений в индексы
- 14. Ищите индексы по NumPy где
- 15. Как быстро захватить определенные индексы из массива numpy?
- 16. Numpy Array Индексы изменений
- 17. Python - binning
- 18. Как переназначить индексы numpy после линейного преобразования
- 19. Невозможно получить требуемые индексы из нескольких массивов NumPy
- 20. Как получить индексы одни из массива
- 21. Как получить индексы, где два массива равны?
- 22. Как логически комбинировать целые индексы в numpy?
- 23. python, индексы минимального массива
- 24. Binning NumPy массив по часам в поле datetime
- 25. Как вернуть все минимальные индексы в numpy
- 26. Легкий способ найти все показатели массива, удовлетворяющие условию?
- 27. NumPy получить маску из массива
- 28. Написание массива 3D numpy в файлы, включая его индексы
- 29. Получить все перестановки массива numpy
- 30. Как получить все удовлетворяющие задания в SMTLIB2?
Спасибо. Это хорошо работает. – LostInTheFrequencyDomain