我有一个矩阵索引列表,想通过这些索引访问一个矩阵。
的例子:
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]])