3D列表索引 - 如何获得特定x,y的max(z)

时间:2014-08-11 09:30:47

标签: python list matrix 3d indexing

我有一个带有3D索引的列表,对于每个组合(x,y,z),我有一个值。我想知道是否有办法获得特定x,y的最大z。

示例:

 a=defaultdict(list)
 ...
 a = {(0,0,1): 5, (0,0,2): 1, (0,0,3): 4}

如何得到(x = 0,y = 0)(应该是3)的max(z)?

我需要使用这种数据结构,因为我有一个带有未知z的动态三维矩阵(Z上的异质数据)。

3 个答案:

答案 0 :(得分:1)

怎么样: max(b[2] for b in a.keys() if b[0] == 0 and b[1] == 0)

这使用生成器表达式返回x和y为0的那些值的z坐标。

答案 1 :(得分:0)

如果您有权使用numpy,则可能会更容易:

>>> import numpy as np
>>> a = np.arange(1, 9).reshape((2, 2, 2))
>>> a
array([[[1, 2],
        [3, 4]],

       [[5, 6],
        [7, 8]]])
>>> a[0, 0].max()
2

答案 2 :(得分:0)

如果您需要对x和y的所有可能组合中的任何组合,我建议您重新排序数据,使得x和y的元组是键,而对应的z是值。然后你可以找到max z:

from collections import defaultdict
a = {(0,0,1): 5, (0,0,2): 1, (0,0,3): 4, (1,0,2): 5}
b = defaultdict(list)
for xyz in a:
    xy = xyz[:-1]
    z = xyz[-1]
    b[xy].append(z)

max(b[(0,0)])