繁体   English   中英

用于稀疏x / y坐标列表的Python数据结构

[英]Python data structure for sparse list of x/y co-ordinates

考虑x / y坐标列表和字节'计数'。 x / y的范围可能是0到5000,即2500万个单元。

然而,数据将非常稀少,最多只有几千个条目,大多数坐标将没有条目。

偶尔会查找/添加结构(例如,如果x = 5和y = 10然后是++),但更频繁地转换为x / y / count列表(排序并不重要)

用于查找的最快数据结构显然是一个二维数组,但是你正在查看大约24 MB的内存,并且输出列表的迭代可能很昂贵。 对于磁盘存储,您可以实现gif样式压缩,其中0字节后跟另一个字节表示x空单元格,其他任何东西都是单元格值 - 但这对内存情况没有帮助。

字典的字典可能是查找/迭代速度和内存使用之间的良好平衡。

是否还有其他合适的数据结构我应该考虑(内置于Python,现有库还是更通用的数据结构?

由点(即2元组)声音键入的字典对我有好处。 O(1)就像一个数组,而且更加紧凑。 只要您不需要进行范围查询等,就应该没问题。

# increment
p = (x, y)
counts[p] = counts.get(p, 0) + 1

# list
for (p, count) in counts.iteritems():
    x, y = p
    print x, y, count

scipy有一系列不同的稀疏数组

有七种可用的稀疏矩阵类型:
csc_matrix:压缩稀疏列格式
csr_matrix:压缩的稀疏行格式
bsr_matrix:块稀疏行格式
lil_matrix:列表格式列表
dok_matrix:密钥格式字典
coo_matrix:COOrdinate格式(又名IJV,三元组格式)
dia_matrix:DIAgonal格式

这应该类似于处理数据范围大小的稀疏矩阵,这里有很多东西需要咀嚼http://en.wikipedia.org/wiki/Sparse_matrix

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM