按 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))
这里有几种方法可以做到这一点:
按照 Geotop 的建议,使用元组索引的字典。
根据我的说法,这是一个优雅的解决方案。
根据遍历的目的和难易程度,您可以将其转换为嵌套列表,如下所示:
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]
。
第二种方法对我来说似乎更好,因为它避免了字典的使用并且使索引更容易(因为它是用整数索引的。)。但最终,这完全取决于您的目的。
如果您经常查找数据或数据量很大,则将其随机存储在列表中并通过搜索获取值不是一个好主意。
我会写一个例子,这样你就可以理解我了:
例如,我有这 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))
这里有几种方法可以做到这一点:
按照 Geotop 的建议,使用元组索引的字典。
根据我的说法,这是一个优雅的解决方案。根据遍历的目的和难易程度,您可以将其转换为嵌套列表,如下所示:
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]
。
第二种方法对我来说似乎更好,因为它避免了字典的使用并且使索引更容易(因为它是用整数索引的。)。但最终,这完全取决于您的目的。
如果您经常查找数据或数据量很大,则将其随机存储在列表中并通过搜索获取值不是一个好主意。