【问题标题】:Numpy zeros 2d array: substituting elements at specific indicesNumpy zeros 2d数组:替换特定索引处的元素
【发布时间】:2020-02-11 21:48:20
【问题描述】:

对于我必须为 CodeSignal 再次编写的函数,我使用 numpy 创建了一个名为“result”的“空”矩阵。在 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)

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

TypeError: 对象不支持项目分配

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

如果我尝试:

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

我明白了:

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

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

【问题讨论】:

  • 你为什么在这里写两次[i+i,j+1]?请注意,min 在这里是一个 2 元组。

标签: python arrays numpy matrix


【解决方案1】:

这样写是没有意义的:

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

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

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

这给了我们:

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

【讨论】:

    猜你喜欢
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    • 2019-06-23
    • 2018-10-12
    • 2021-07-04
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多