gpt4 book ai didi

python - 在postgresql中存储一个大矩阵并在python中操作它

转载 作者:行者123 更新时间:2023-12-01 06:39:43 25 4
gpt4 key购买 nike

我有一个大矩阵,目前存储在特定的表中。
每个矩阵行都有一个与不同表相关的特定 ID。 (这就是我使用 RDBMS 的原因)。
目前,我使用“JSONB”类型列作为矩阵行的字段(每个矩阵行包含 10000 列)。
所以它看起来像这样 -
ID、不同表 ID、矩阵行 (JSONB)

现在,我想查询该表以使用矩阵。例如,当查询应该在 python 中以矩阵形式检索矩阵时,对矩阵的 500 行进行批量迭代。

我该怎么做?
有没有更好的方法来存储这个矩阵,以便我以后可以对其进行操作?
我应该使用 HDF5 而不是 SQL 吗?

最佳答案

我假设,当前您尝试通过让 postgres 搜索 json 内容来获取适合单元格内容的“不同表 ID”。我假设此搜索会查找 100000 条记录并进行 10000 次比较。如果一次搜索返回 500 条记录,则意味着 0.5% 是至少 10 亿整数或浮点比较 (4 GB) 或 double 8 GB 的结果。如果您不想将其保留在主内存中(现在这很容易),但想使用 SQL-DBMS:

可以根据以下建议进行合理定义:

  1. 使用两个表

Table1:行 ID,不同的表 ID

表2:行ID,单元索引(2字节),单元内容(4字节)

  • 如果 Row-ID 不重要:只需一个表
  • 不同表 ID、单元索引(2 字节,因为小于 32000)、单元内容(4 字节?)

    考虑将这些表定义为 https://www.postgresql.org/docs/current/sql-cluster.html

    如果单元格的顺序不重要,则删除单元格索引

  • 如果单元格内容值变化不大,因此如果它们可能仅包含 0 到 32000 之间的值,您也可以考虑使用位图索引。
  • 在所有情况下,postgres 应该能够避免搜索所有 100000 条记录来返回结果。总而言之,了解可能需要的不同 ID 和值的范围非常重要。从一开始就定义的范围越小,postgres 就能更好地优化搜索。一切都比每次查询都要搜索 4 GB+ 空间要好。

    关于python - 在postgresql中存储一个大矩阵并在python中操作它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59512103/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com