python — Замена значения в столбце массива numpy с заданным индексом из вектора с теми же строками

#python #arrays #numpy #vector #indexin&

#python #массивы #numpy #вектор #индексирование

Вопрос:

 A = np.zeros(shape = (3,4))
A = [[0 0 0 0]
     [0 0 0 0]
     [0 0 0 0]]

B = np.asarray[[2],[0],[3]]
  

Существует ли простой способ изменить значение компонентов a в A (например, на 1) без цикла for, учитывая индекс в B

Такое, что:

 A = [[0 0 1 0]
     [1 0 0 0]
     [0 0 0 1]]
  

Я смог получить этот вывод с помощью цикла for, но предпочел бы, чтобы это было не так, для масштабируемости в массивах с большей размерностью.

Ответ №1:

Взгляните на расширенную индексацию в numpy.

Вы можете сделать

 A[[0, 1, 2], [2, 0, 3]] = 1
  

Мы индексируем для извлечения 3 местоположений и установки значения, таким образом, каждый список, используемый для индексации, имеет длину 3. И A имеет 2 параметра dimm, поэтому мы используем два списка (вы также можете использовать только один список, если хотите получить полные строки).

Это также работает с массивами

 A[np.aran&e(A.shape[0]), [2, 0, 3]] = 1