python - 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 数组更改或添加元素的方法是什么?
解决方案
写是没有意义的:
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.]])
推荐阅读
- ibm-watson - IBM Watson Assistant 超时/空闲问题
- visual-studio-2019 - Visual Studio 2019 逻辑应用设计器删除代码
- azure - 没有匹配的测试结果文件
- react-redux - 从我的 react-redux 前端获取 422(无法处理的实体)
- c# - Interop ExportAsFixedFormat 上的错误 0x800A03EC
- list - 如何在子句中选择性地运行目标
- classification - 产品分类
- javascript - React Redux 正在创建不必要的索引
- c# - EF select many 不检索没有关系的记录
- android - 使用 Jetpack Compose 对文本进行内部填充