#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)