python - h5py 使用指针的对称数组

标签 python arrays symmetric h5py

我一直在寻找一种方法来创建最终对称的自定义 h5py 数组。理想情况下,它是一个数组,在创建时具有 a[i][j]a[j][i] 指向的单个值。这样做的原因是我将把一个大的距离向量写入一个方形矩阵中。向量和方阵太大,无法保存在内存中,因此我想要一个相对快速的解决方案来创建方阵。

最佳答案

我建议使用一些额外的逻辑来做到这一点,使用一维数组来存储矩阵的上三角形。使用如下映射映射一维数组 <-> 二维数组中的索引:

[[0  1  2  3 ]
 [x  4  5  6 ]
 [x  x  7  8 ]
 [x  x  x  9 ]]

您可以为此编写一个函数:

from __future__ import division
def tri_ravel_factory(n_cols):
    def tri_ravel(j, k):
        assert j < n_cols, 'j out of range'
        assert k < n_cols, 'j out of range'
        assert j >= 0, 'j out of range'
        assert k >= 0, 'j out of range'        
        if k < j:
            j, k = k, j
        #return sum(n_cols - tmp for tmp in range(0, j)) + (k - j)
        return j * n_cols - (j * (j-1))//2 + (k-j)
    return tri_ravel


test_ravel = tri_ravel_factory(4)
indx = test_ravel(1, 0)    

这只会让你得到两倍的结果。使用稀疏数组可能会更好,动态计算所需的距离,或者找到一种不必计算大部分距离的方法(例如,如果您只关心与 distance < r 配对)。

关于python - h5py 使用指针的对称数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13620719/

相关文章:

python - 如何将自定义模板标签传递给 Jinja2 Template 类?

python - 与子流程交互

使用数组的 Java 矩阵

javascript - JavaScript 的双等号 (==) 总是对称的吗?

tensorflow - 如何强制 tensorflow 张量对称?

python - 在 Python 中 n 次失败后退出无限循环的最佳方法是什么?

python - 检查列中的每个值在另一列 pandas 中是否只有一个对应的值

c - 将值分配给结构数组中的变量

c - 将结构体中的数组分配给带有数组的新结构体

matrix - 使用 awk 计算大文件的对称矩阵