按 x、y 和多个 z 存储点

Store points by x, y and multiple z

我会写一个例子,这样你就可以理解我了:

例如,我有这 3 个点:(0, 1, 244) - (0, 1, 255) - (1, 2, 133)

实际上,当 2 个点具有相同的 (x, y) 时,我需要对 Z 进行平均。我的想法是将它们存储在带有双 index/key 的东西(数组,字典?)中,其中值是 Z.

的数组

所以我基本上想要这个:[0, 1, [244, 255]] 和 [1, 2, [133]]

我的问题是我不知道用什么来存储它们是最简单的方法...

提前致谢!

元组可以是字典键:

myDict = {(1,2): 3}

完全有效。

另一种方法是使用 itertools.groupby,但请确保您的列表已按您要用于群组的关键字排序 (https://docs.python.org/3/library/itertools.html#itertools.groupby):

from itertools import groupby

myList = [(1,2,3), (1,2,4), (1,3,4)]
for grp, values in groupby(myList, lambda x: (x[:2])):
   print(grp, list(values))

使用字典:

points = [(0, 1, 244), (0, 1, 255), (1, 2, 133)]
d = {}
for point in points:
    key = point[:2]
    if key in d.keys():
        (d[key]).append(point[2])
    else:
        d[key] = [point[2]]
print(d)

对于平均值:

import numpy as np
for k in d.values():
    print(np.mean(k))

这里有几种方法可以做到这一点:

  1. 按照 Geotop 的建议,使用元组索引的字典。
    根据我的说法,这是一个优雅的解决方案。

  2. 根据遍历的目的和难易程度,您可以将其转换为嵌套列表,如下所示:

    a = [ [ (1,2), (3,4), (5,6) ], [ [123,234,345], [567,678,543], [433,645,754] ]]

现在您可以使用 a[1][i] 访问对应于 (x,y)z 值列表,其中元组 (x,y) 存储为 a[0][i]

第二种方法对我来说似乎更好,因为它避免了字典的使用并且使索引更容易(因为它是用整数索引的。)。但最终,这完全取决于您的目的。

如果您经常查找数据或数据量很大,则将其随机存储在列表中并通过搜索获取​​值不是一个好主意。