mal*_*ngi 6 python numpy matrix sparse-matrix data-structures
我使用python与肥胖型(约2000×2000)的矩阵,其中每个工作I,J在矩阵点代表单个像素.
矩阵本身是稀疏的(即它们的大部分将具有零值),但是当它们被更新时,它们倾向于增量操作,对于矩形"块"中的大量相邻像素,而不是这里的随机像素或那里(我目前没有利用的财产......).对矩阵算法有点新意,但我已经研究了许多可能的解决方案,包括scipy稀疏矩阵的各种风格.到目前为止,协调(COO)矩阵似乎是最有希望的.因此,例如,我想增加一个块形状,我必须做的事情是:
>>> from scipy import sparse
>>> from numpy import array
>>> I = array([0,0,0,0])
>>> J = array([0,1,2,3])
>>> V = array([1,1,1,1])
>>> incr_matrix = sparse.coo_matrix((V,(I,J)),shape=(100,100))
>>> main_matrix += incr_matrix #where main_matrix was previously defined
Run Code Online (Sandbox Code Playgroud)
在未来,我希望在任何情况下都有更丰富的像素值表示(代表RGB等的元组),numpy数组不支持开箱即用(或者我可能需要使用它).
最终我会有一些这些矩阵,我需要做简单的算术,我需要代码尽可能高效 - 并且可以分发,所以我需要能够坚持和交换这些物体在小型表示中没有实质性的惩罚.我想知道这是否是正确的方法,或者我是否应该使用dicts等自己的结构?
一般规则是,首先让代码运行,然后根据需要进行优化......
在本例中,使用普通的 numpy 2000x2000 数组,或者 RGB 为 2000x2000x3。这将更容易和更快地使用,仅需要很小的内存,并且具有许多其他优点,例如,您可以使用标准图像处理工具等。
然后,如果需要,“为了保存和交换这些对象”,您可以使用 gzip、pytables、jpeg 或其他方式压缩它们,但无需限制基于数据操作的存储要求。
通过这种方式,您可以获得更快的处理速度和更好的压缩效果。