在Python中处理大型密集矩阵

2024-04-11

基本上,在 python 中存储和使用密集矩阵的最佳方法是什么?

我有一个项目,可以生成数组中每个项目之间的相似性度量。

每个项目都是一个自定义类,并存储一个指向另一个类的指针和一个表示它与该类的“接近度”的数字。

目前,它在处理约 8000 个项目时表现出色,之后就会因内存不足错误而失败。
基本上,如果您假设每次比较使用 ~30(根据测试似乎是准确的)字节来存储相似性,则意味着所需的总内存为:
numItems^2 * itemSize = Memory
因此,内存使用量根据项目数量呈指数级增长。
就我而言,每个链接的内存大小约为 30 字节,因此:
8000 * 8000 * 30 = 1,920,000,000 bytes, or 1.9 GB
这正是单线程的内存限制。

在我看来,必须有一种更有效的方法来做到这一点。我研究过内存映射,但仅仅为了生成相似性值就已经需要大量计算,并且通过硬盘驱动器来限制它似乎有点荒谬。

Edit
我看过 numpy 和 scipy。不幸的是,它们也不支持非常大的数组。

>>> np.zeros((20000,20000), dtype=np.uint16)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
MemoryError
>>>

进一步编辑
Numpy 似乎很受欢迎。然而,numpy 不会真正做我想做的事,至少没有另一个抽象层。

I don't want为了存储数字,我想存储对类的引用。 Numpy 支持对象,但这并不能真正解决数组大小问题。我提出 numpy 只是作为一个例子isn't在职的。

有什么建议吗?

Edit好吧,我最终只是重写了所有逻辑,使其不再存储任何冗余值,从而减少了内存使用量O*n^2 to O*((n*(n-1))/2).

基本上,这整个事件是握手问题 http://en.wikipedia.org/wiki/Handshake_problem,因此我已从存储所有链接切换为仅存储每个链接的单个版本。

这不是一个完整的解决方案,但我通常没有足够大的数据集来溢出它,所以我认为它会解决。 PyTables 确实很有趣,但我不懂任何 SQL,而且似乎没有任何好的传统切片或基于索引的方式来访问表数据。我将来可能会重新讨论这个问题。


好吧,我找到了我的解决方案:
h5py https://web.archive.org/web/20150215002454/http://code.google.com:80/p/h5py/

它是一个基本上呈现类似 numpy 的界面的库,但使用压缩的内存映射文件来存储任意大小的数组(它基本上是 HDF5 的包装器)。

PyTables 是建立在它的基础上的,PyTables 实际上引导我实现了它。但是,我不需要 PyTables 主要提供的任何 SQL 功能,并且 PyTables 没有提供我真正想要的干净的类似数组的接口。

h5py 基本上就像一个 numpy 数组,只是以不同的格式存储数据。

除了磁盘空间之外,它似乎对数组大小也没有限制。我目前正在 100,000 * 100,000 uint16 数组上进行测试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Python中处理大型密集矩阵 的相关文章

  • 如何显示 matplotlib 饼图中的实际值

    我有一个饼图 绘制从 CSV 文件中提取的值 当前显示值的比例 百分比显示为 autopct 1 1f 有没有办法显示每个切片的数据集中表示的实际值 Pie for Life Expectancy in Boroughs import pa
  • Pandas - 按每个可能的键组合聚合

    我有一个 DataFrame Pandas 我想通过 A B C 和 D 列的组合尽可能按数据进行分组 假设它具有以下形式 A B C D E F G 0 Y X Y Z 1 2 7 1 Y X Y Z 3 4 8 2 X Y U V 1
  • 使用 python 中的 java 库

    我有一个 python 应用程序和 java 应用程序 python 应用程序为 java 应用程序生成输入并在命令行上调用它 我确信一定有一个更优雅的解决方案 就像使用 JNI 从 Java 调用 C 代码一样 有什么指点吗 仅供参考 我
  • CSS3 矩阵 3d 矩形到梯形的转换

    我正在尝试使用 webkit 对 CSS3 的支持transform matrix3d
  • 使用 Tkinter 进行多线程 Python

    我用这些函数在画布上画小圆圈 这是绘制圆圈的函数 class Fourmis def init self can posx posy name radius self can can self largeur can int self ca
  • uwsgi + Django REST框架:空闲时间后很少有缓慢的请求

    我正在运行 Django REST 框架 白天每分钟的请求率相当低 我注意到一个我无法解释或重现的问题 每天 在夜间或清晨 当我的 RPM 接近于零时 我会收到 1 10 个超慢的请求 我的平均响应时间100 到 200 毫秒之间 但是这个
  • Windows 中的信号处理

    在Windows中 我试图创建一个等待SIGINT信号的python进程 当它收到SIGINT时 我希望它只打印一条消息并等待SIGINT的另一次出现 所以我使用了信号处理程序 这是我的 signal receiver py 代码 impo
  • 属性错误:未找到下层;在 scikit-learn 中使用带有 CountVectorizer 的 Pipeline

    我有一个这样的语料库 X train this is an dummy example in reality this line is very long here is a last text in the training set 和一
  • CodingBat sum67:为什么这个解决方案是错误的?

    我正在解决以下codingbat问题 返回数组中数字的总和 但忽略以 6 开头并延伸到下一个 7 的数字部分 每个 6 后面至少有一个 7 如果没有数字则返回 0 sum67 1 2 2 5 sum67 1 2 2 6 99 99 7 5
  • 添加反斜杠而不转义[重复]

    这个问题在这里已经有答案了 我需要逃离 字符串中的 字符 问题是每当我string string replace 结果是 添加额外的反斜杠来转义原始反斜杠 如何删除这个多余的反斜杠 结果 仅显示 实际上字符串是 gt gt gt str g
  • 包含可变数据的正则表达式 - ply.lex

    我正在使用 python 模块ply lex编写一个词法分析器 我用正则表达式指定了一些标记 但现在我卡住了 我有一个list of Keywords谁应该是token data是一个包含大约 1000 个关键字的列表 这些关键字都应该被识
  • 为线条指定颜色

    我试图在 matplotlib 中绘制可变数量的行 其中 X Y 数据和颜色存储在 numpy 数组中 如下所示 有没有办法将颜色数组传递到绘图函数中 这样我就不必采取额外的步骤来单独为每条线分配颜色 我是否应该将 RGB 颜色数组转换为另
  • 为 pandas 数据框中的两列创建邻接矩阵

    我有一个以下形式的数据框 index Name A Name B 0 Adam Ben 1 Chris David 2 Adam Chris 3 Ben Chris 我想获得邻接矩阵Name A and Name B ie Adam Ben
  • Google App Engine 开发服务器中的 PyCrypto“ImportError:无法导入名称 blockalgo”

    我有一个使用 PyCrypto 使用 AES 加密字符串的函数 当我在单元测试中调用该函数时 一切正常 在生产环境中 它也运行得很好 但是 在GAE开发服务器上调用该函数时 会抛出错误 ImportError 无法导入名称blockalgo
  • 使用每日频率格式化 x 轴

    我正在尝试获取每日数据图 我有 3 个月的数据 每天都很难指出 如何格式化 x 轴 以便我可以获得每个日期 可以使用以下命令更改主要刻度的频率set major locator mdates DayLocator interval 5 如下
  • 无法运行特定的 .pyc 文件

    使用编译在unix工作的python文件后 import py compile py compile compile server py 我在同一目录中获得 pyc 文件 但是当我尝试在 putty 中使用 server pyc 运行该文件
  • 为什么 Python 布尔值占用超过一个字节?

    显然 Python 中整数占用 24 个字节 我可以理解 它这样做是因为代表无限数字的额外花哨 然而 布尔数据类型看起来也花费了高达 24 个字节 尽管它只能表示两个可能值之一 为什么 除了 1 位表示之外 还可能需要存储哪些额外数据Tru
  • numpy 中的分层抽样

    在 numpy 中我有一个这样的数据集 前两列是索引 我可以通过索引将数据集分成多个块 即第一个块是 0 0 第二个块是 0 1 第三个块 0 2 然后是 1 0 1 1 1 2 等等 每个块至少有两个元素 索引列中的数字可能会有所不同 我
  • PyTorch 中的交叉熵

    交叉熵公式 但为什么下面给出loss 0 7437代替loss 0 since 1 log 1 0 import torch import torch nn as nn from torch autograd import Variable
  • 开始使用 Python 在 CSV 的特定行上读写

    我有一个 CSV 文件 如下所示 COL A COL B 12345 A 1 B 2 C 3 如何读取该文件并将其写回新文件 但只写第二行 行 我希望输出文件包含 12345 A 1 B 2 C 3 Thanks 下面读取您的 csv 提取

随机推荐

  • Spring JPA - “java.lang.IllegalArgumentException:投影类型必须是接口!” (使用本机查询)

    我正在尝试从 Oracle 数据库检索时间戳日期 但代码抛出 java lang IllegalArgumentException 投影类型必须是 界面 我尝试使用本机查询 因为原始查询对于使用 Spring JPA 方法或 JPQL 来说
  • 使用 ASP.NET MVC 的 SEO URL

    有没有一个确定的DO and DONT当实施 seo url 时 许多好的做法对于 html 网站来说似乎很好 但在中型 大型数据库网站上却失效了 据我所知 网址应该是www mysite com category page name he
  • require_once 与子文件夹[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我的文件夹
  • Angular2/Angular 种子 http-proxy-middleware 代理 api 请求

    我正在使用角种子项目 https github com mgechev angular seed tree master tools并尝试为在不同端口上运行的后端服务的 api 请求设置代理 到目前为止我的代码 Add proxy midd
  • 如何在 PowerShell 中取消“终止批处理作业 (Y/N)”确认?

    When I press Ctrl C in PowerShell I receive 终止批处理作业 是 否 如同https superuser com questions 35698 how to supress terminate b
  • 在 JFrame 中绘制矩形不起作用

    我有一段代码应该在JFrame但是当我在 Eclipse 上运行该程序时 它只是打开框架 但没有在其上绘制圆圈 这是代码 import javax swing import java awt public class Infout Info
  • 错误:2 UNKNOWN:访问被拒绝:通道 [contentbackchainchannel] 创建者组织

    我已经与两个组织建立了结构网络 协调者组织和参与者组织 使用orchestratororg的用户 我可以调用或查询链代码 但是当尝试使用participantorg的用户查询时 我收到如下错误 错误 2 未知 访问被拒绝 通道 conten
  • constexpr 默认默认构造函数

    如果我想声明我的 Clang 3 8 和 GCC 5 3 我会收到编译器错误default ed 默认构造函数为constexpr 根据this https stackoverflow com questions 20810378 shou
  • google action包如何定义自定义槽类型?

    您好 这是一个关于 google home action sdk gactions exe 的问题 at https developers google com actions reference rest Shared Types Que
  • Angular Material - 设置调色板

    我正在尝试结合材料设计建立一个 Angular 项目 我的 package json 的一部分如下所示 dependencies angular2 material button 2 0 0 alpha 3 angular2 materia
  • 如何在两台电脑之间共享svn仓库

    我的工作站上有 SVN 存储库 我在工作站和笔记本电脑上都使用它 在工作站上 我可以在本地访问存储库 但在笔记本电脑上 我必须连接互联网才能访问存储库 这不方便 因为我无法在飞机 火车和其他无互联网的地方工作 我想比较修订等 在笔记本电脑上
  • 如何获取mysql中两个日期之间的月份列表

    我必须获取 mysql 中两个日期之间的月份列表 For Example My Input is From date 23 01 2013 To Date 01 04 2014 Output Should be Jan 2013 Feb 2
  • 验证错误:ul 不允许作为元素 span 的子元素

    我不明白为什么 WC3 验证器将此 HTML 标记为无效 它报告的错误是 在此上下文中 不允许元素 ul 作为元素 span 的子元素 抑制该子树中的更多错误 我正在使用 HTML5 此代码用于面包屑 span class bread ul
  • 如何以编程方式显示“清除默认值”?

    现在我正在开发一个家庭启动器应用程序 我想清除默认家庭启动器的默认设置 例如 三星主页 即 我想展示Settings gt Applications gt Manage Application gt Samsung Home gt clea
  • Swift:未定义的符号:iTunesApplication

    我现在正在尝试创建 Swift OS X 应用程序 但发现使用 ScriptingBridge 很困难 我包含了正确的 iTunes h 文件 并且当我将 iTunesApplication 写入类型时 Xcode 没有给出任何错误 但是
  • eclipse:链接资源的位置无效

    我尝试链接一个项目文件夹 该文件夹是特殊的 vista 文件夹 appdata roaming user myproj 它显示了上面的错误消息 什么阻止这样做 我尝试以管理员身份运行 但它给出了相同的消息 当然 从appdata文件夹中出来
  • 具有多个约束的 PostgreSQL 更新插入

    我正在尝试在有两个约束的表上进行更新插入 一种是a列是唯一的 另一种是b c d和e列一起是唯一的 我不想要的是 a b c d 和 e 一起是唯一的 因为这将允许两行在 a 列中具有相同的值 如果违反第二个约束 唯一的 b c d e 则
  • MSSQL 和 PHP:“传递给 sqlsrv_query 的参数无效。”

    我正在尝试通过 PHP 运行一个非常简单的 MSSQL 更新语句 但收到一条错误消息 无效的参数已传递给 sqlsrv query 这是连接等级 http pastebin com 3j4zmHJY我正在使用 最相关的是查询功能 funct
  • 控制 Android NDK 中的编译器标志?

    我知道我可以使用LOCAL CFLAGS将参数传递给编译器 然而 ndk build正在我的后面插入选项LOCAL CFLAGS 因此它们优先 例如我想指定 Ofast but ndk build adds O2在我自己的标志之后 并且由于
  • 在Python中处理大型密集矩阵

    基本上 在 python 中存储和使用密集矩阵的最佳方法是什么 我有一个项目 可以生成数组中每个项目之间的相似性度量 每个项目都是一个自定义类 并存储一个指向另一个类的指针和一个表示它与该类的 接近度 的数字 目前 它在处理约 8000 个