Присвоение значений ячейкам numpy за один раз

#python #numpy

#python #numpy

Вопрос:

Предположим, у меня есть 2D массив numpy с нулями. Я хочу присвоить 1 нескольким ячейкам. Как мне это сделать?

Так, например:

 arr = np.zeros((5,3)) 
idx = [0,1,2,2,0]
  

Здесь idx приведены индексы столбцов ячеек, которые я хочу изменить.

Итак, мой желаемый результат:

 1 0 0
0 1 0
0 0 1
0 0 1
1 0 0
  

Ответ №1:

Попробуйте расширенную индексацию:

 arr[np.arange(len(arr)), idx] = 1
  

Ответ №2:

 current = 0

for row in arr:
    col = idx[current]
    row[col] = 1
    current  = 1
  

Ответ №3:

 import numpy as np
from random import randint
arr = np.zeros((5,3))
idx = [0,1,2,2,0]
#Validate idx elements here 
#Distribute 1s to columns randomly
for x in idx:
    while True:
        i = randint(0,arr.shape[0] - 1)
        if arr[i][x] == 1:
            continue #Try again 
        else:
            arr[i][x] = 1
            break
print (arr)