Numpy: условный поиск - PullRequest
4 голосов
/ 16 мая 2019

У меня есть следующие массивы

I0 = np.array([1, 0, 0, 0, 1, 0, 0, 1])
X0 = np.array([1, 3, 4, 4, 5, 6, 7, 8])

I1 = np.array([1, 0, 0, 1, 1, 0, 1])
X1 = np.array([1, 4, 5, 6, 7, 8, 9])

Для значений в X1, где I1 == 1 Я хочу найти индексы в X0, где (I0 == 1) & (X0 <= X1)

indices = np.searchsorted(X0[I0 == 1], X1[I1 == 1], side='right')-1
X0[I0 == 1][indices] # [1, 5, 5, 8]

но вместо индексов в X0[I0 == 1] Я хочу индексы в X0.

1 Ответ

3 голосов
/ 16 мая 2019

Индексы соответствующих элементов

Q0 = np.arange(X0.size)[I0 == 0]

So

indices = Q0[indices]

На несвязанной ноте я настоятельно рекомендую сделать ваши I* массивы логическими. Например:

I0 = np.array([True, False, False, False, True, False, False, True])

Это позволит вам напрямую индексировать его без необходимости создания другого временного массива:

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