Numpy: Попытка установить значение для фрагмента массива - PullRequest
0 голосов
/ 23 февраля 2019

Я пытался выполнить следующее:

Для данного массива выберите первый набор индексов.Затем выберите другой набор индексов и измените значение массива на другое значение.

Пример кода:

r = np.random.randn(15)
ind_a = [0, 2, 3, 6, 8, 9, 10, 12, 14]
ind_b = [0, 4, 5]
r[ind_a][ind_b] = 1

Я хочу установить 0-й, 4-й иПятые индексы первого набора индексов равны 1. Так что это будут 0-й, 8-й и 9-й индексы исходного массива до 1.

Но код, который я использую, не работает.Есть ли другой способ сделать это?Я провел несколько часов, разбираясь с булевыми масками и причудливым индексированием, пытаясь обойти проблему, но, похоже, не могу этого понять.

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Вам нужно нарезать ind_a сначала:

r[np.array(ind_a)[ind_b]] = 1
print(r)
array([1., 0., 0., 0., 0., 0., 0., 0., 1., 1., 0., 0., 0., 0., 0.])
0 голосов
/ 23 февраля 2019

Меня слегка смущает формулировка вашего вопроса, но позвольте мне посмотреть, поможет ли это.

Вопрос: Возьмите числа из ind_b в качестве индексов для ind_a.Используйте выбранные числа из ind_a в качестве индексов r, которые должны быть установлены в 1.

Ответ: Используйте цикл for следующим образом:

for i in ind_b:
    j = ind_a[i]
    r[j] = 1

Это изменит r следующим образом:

>>> r
[1, 1, 2, 3, 4, 5, 6, 7, 1, 1, 10, 11, 12, 13, 14]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...