假设我在Python中有一个n维矩阵表示为列表列表。我希望能够使用n元组索引矩阵。这可能吗?怎么样?
谢谢!
答案 0 :(得分:5)
使用
>>> matrix = [[1, 2, 3], [4, 5, 6]]
你可以这样做:
>>> array_ = numpy.asarray(matrix)
>>> array_[(1,2)]
6
或者没有numpy:
>>> position = (1,2)
>>> matrix[position[0]][position[1]]
6
答案 1 :(得分:4)
这是一种方式:
matrx = [ [1,2,3], [4,5,6] ]
def LookupByTuple(tupl):
answer = matrx
for i in tupl:
answer = answer[i]
return answer
print LookupByTuple( (1,2) )
答案 2 :(得分:3)
为了好玩:
>>> get = lambda i,m: m if not i else get(i[1:], m[i[0]])
>>> matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> idx = (1,2)
>>> get(idx, matrix)
6
答案 3 :(得分:1)
是
>>> from functools import reduce # Needed in Python 3
>>>
>>> # A 3D matrix
>>> m = [
... [
... [1, 2, 3],
... [4, 5, 6]
... ],
... [
... [-1, -2, -3],
... [-4, -5, -6]
... ]
... ]
>>>
>>> m[0][1][2]
6
>>> tuple_idx = (0, 1, 2)
>>> reduce(lambda mat, idx: mat[idx], tuple_idx, m)
6
或者您可以创建一个类别Matrix,其中有__getitem__
方法(假设列表列在self.data中):
class Matrix(object):
# ... many other things here ...
def __getitem__(self, *args):
return reduce(lambda mat, idx: mat[idx], args, self.data)
使用该方法,如果minstance[0, 1, 2]
是Matrix实例,则可以使用minstance
。
Numpy ndarray
已经有类似的东西,但允许切片和分配。
答案 4 :(得分:0)
如果您的代码保证元组中的每个索引都对应于矩阵的不同“级别”,那么您可以直接索引每个子列表。
indices = (12, 500, 60, 54)
val = matrixes[indices[0]][indices[1]][indices[2]][indices[3]]