Numpy массив нулей 2d: замена элементов по указанным c индексам - PullRequest
1 голос
/ 12 февраля 2020

Для функции, которую я должен написать снова для CodeSignal, я создаю «пустую» матрицу с numpy, которая называется «result». В течение a для l oop я хочу добавить 1 к определенным элементам этой матрицы нулей:

matrix = [[True, False, False],
          [False, True, False],
          [False, False, False]]

matrix = np.array(matrix)                        ## input matrix 
(row, col) = matrix.shape
result = np.zeros((row,col), dtype=int)         ## made empty matrix of same size 

for i in range(0, row): 
    for j in range(0, col):
        mine = matrix[i,j],[i,j]
        if mine[0] == True:                     ##for indices in input matrix where element is called True..
            result[i+1,j+1][i+1,j+1] = 1        ##..replace neighbouring elements with 1 (under construction ;) ) 
print(result)

Моя самая первая проблема возникает с последней частью, заменяя элементы на заданные индексы с другим значением. Например, результат [1,1] [1,1] = 1 Я всегда получаю сообщение об ошибке

TypeError: объект не поддерживает назначение элемента

, и это происходит после установки np.zeros для различных типов объектов - int32, int8, complex, float64 ...

Если я попытаюсь:

Например, результат [1,1] [1,1] == 1

Я получаю:

IndexError: недопустимый индекс для скалярной переменной.

Так как же изменить или добавить элементы в 2d np-массивы по заданным параметрам? c мест?

1 Ответ

3 голосов
/ 12 февраля 2020

Нет смысла писать:

matrix[i,j][i,j]

Матрица - это двумерный массив, что означает, что matrix[i,j] - это скаляр, а не массив. Применение 0[i,j] бессмысленно.

Вы можете реализовать это следующим образом:

for i in range(row<b>-1</b>): 
    for j in range(col<b>-1</b>):
        if matrix[i,j]:
            result[i+1,j+1] = 1

здесь вы, таким образом, будете «сдвигать» значения matrix одно вправо, а другое вниз. Но тогда вам лучше выполнить это с:

result[1:,1:] = matrix[:-1,:-1]

Это тогда даст нам:

>>> result
array([[0., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])
...