使用元组/列表作为数组索引(Python)

时间:2013-08-14 13:32:04

标签: python matrix

假设我在Python中有一个n维矩阵表示为列表列表。我希望能够使用n元组索引矩阵。这可能吗?怎么样?

谢谢!

5 个答案:

答案 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]]