通过Numpy中的矩阵索引列表访问矩阵



我有一个矩阵索引列表,想通过这些索引访问一个矩阵。

的例子:

indices = [(2, 0), (2, 1), (2, 2)]
mat = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
mat[indices] = 0

这应该导致[[1, 2, 3], [4, 5, 6], [0, 0, 0]],但不幸的是我总是得到"list indices must be integers, not list"。

编辑

正如user2357112在他的评论中建议的那样,我现在尝试了以下操作:

mat = numpy.array(mat)
indices = numpy.array(indices)
mat[indices] = 0

但是不幸的是现在整个矩阵都被0填满了

indices是元组的常规列表,不能用于获取常规 mat的元素。你能做的就是遍历你的列表来得到你的索引:

for x, y in indices:
    mat[x][y] = 0

如果你想使用numpy方法,你需要创建一个numpy数组。实际上,np.array结构允许使用元组访问元素:

mat = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
for item in indices:
    mat[item] = 0

可以使用zip(*indices)访问numpy数组索引列表:

import numpy as np
indices = [(2, 0), (2, 1), (2, 2)]
mat = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
>> mat[zip(*indices)]
array([7, 8, 9])
>> mat[zip(*indices)] = 0
>> mat
array([[1, 2, 3],
       [4, 5, 6],
       [0, 0, 0]])

最新更新