首页 > 解决方案 > Numpy zeros 2d数组:替换特定索引处的元素

问题描述

对于我必须为 CodeSignal 再次编写的函数,我创建了一个名为“result”的 numpy 的“空”矩阵。在 for 循环过程中,我想将 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)

我的第一个问题来自最后一部分,用另一个值替换给定索引处的元素。例如 result[1,1][1,1] = 1 我总是得到错误

TypeError:对象不支持项目分配

这发生在将 np.zeros 设置为各种对象类型之后 - int32、int8、complex、float64 ......

如果我尝试:

例如结果[1,1][1,1] == 1

我得到:

IndexError:标量变量的索引无效。

那么在特定位置向 2d np 数组更改或添加元素的方法是什么?

标签: pythonarraysnumpymatrix

解决方案


写是没有意义的:

matrix[i,j][i,j]

该矩阵是一个二维数组,这意味着它matrix[i,j]是一个标量,而不是一个数组。申请0[i,j]是没有意义的。

您可以将其实现为:

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

因此,您将在此处将 1 的值“移动”matrix到右边,然后将 1 的值“移动”下来。但是,您最好使用以下方法执行此操作:

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

这给了我们:

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

推荐阅读