numpy.dot -> MemoryError,my_dot -> 非常慢,但有效。为什么?

2023-12-22

我正在尝试计算两个大小分别为 (162225, 10000) 和 (10000, 100) 的 numpy 数组的点积。但是,如果我调用 numpy.dot(A, B) 则会发生 MemoryError 。 然后,我尝试编写我的实现:

def slower_dot (A, B):
    """Low-memory implementation of dot product"""
    #Assuming A and B are of the right type and size
    R = np.empty([A.shape[0], B.shape[1]])
    for i in range(A.shape[0]):
        for j in range(B.shape[1]):
            R[i,j] = np.dot(A[i,:], B[:,j])
    return R

它工作得很好,但当然很慢。您知道 1)此行为背后的原因是什么以及 2)我如何规避/解决该问题吗?

我在一台配备 64 位、16GB 内存、运行 Ubuntu 14.10 的计算机上使用 Python 3.4.2(64 位)和 Numpy 1.9.1。


您收到内存错误的原因可能是因为 numpy 试图在调用中复制一个或两个数组dot。对于中小型数组,这通常是最有效的选择,但对于大型数组,您需要对 numpy 进行微观管理以避免内存错误。你的slower_dot函数很慢主要是因为 python 函数调用开销,您会遭受 162225 x 100 次。当您想要平衡内存和性能限制时,这是处理这种情况的一种常见方法。

import numpy as np

def chunking_dot(big_matrix, small_matrix, chunk_size=100):
    # Make a copy if the array is not already contiguous
    small_matrix = np.ascontiguousarray(small_matrix)
    R = np.empty((big_matrix.shape[0], small_matrix.shape[1]))
    for i in range(0, R.shape[0], chunk_size):
        end = i + chunk_size
        R[i:end] = np.dot(big_matrix[i:end], small_matrix)
    return R

您需要选择最适合您的特定数组大小的 chunk_size 。通常,只要所有内容都适合内存,较大的块大小会更快。

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

numpy.dot -> MemoryError,my_dot -> 非常慢,但有效。为什么? 的相关文章

随机推荐

  • Hibernate、Java 9 和 SystemException

    我一直在尝试在 Java 9 Spring Boot 1 5 x Maven 项目中运行 Hibernate 5 2 11 应用程序 但缺少类 Caused by java lang NoClassDefFoundError javax t
  • 找不到 com.google.android.gms:strict-version-matcher-plugin:1.1.0

    无法解析配置 类路径 的所有文件 找不到 com google android gms strict version matcher plugin 1 1 0 在以下位置进行了搜索 https jcenter bintray com com
  • 当新值与上一个值相同时 StateFlow 不会发出

    我有一个登录表格 我用StateFlow发送LoginResult 调用API后 来自ViewModel to Activity 在活动中 如果登录失败 我将显示错误对话框 第一次运行良好 但从第二次登录失败后 错误对话框将不再显示 我测试
  • Rails 3.1 间歇性“脚本头过早结束”

    所以我开始将我们的应用程序从 Rails 3 0 9 升级到 Rails 3 1 它在开发环境中运行良好 是时候将其放到临时服务器上了 这样我们就可以运行一些完整的验收测试 但是哦 不 我们正面临着可怕的 内部服务器错误 页面有一半的时间返
  • XML 漏洞

    xml 一直是面向服务的应用程序 SOA 的支柱 并且在未来它将变得非常有用 由于 xml 简单 灵活 因此很容易受到攻击 攻击者可以将其用于自己的目的 因此 一些攻击是强制解析攻击 XML外部实体 XEE 攻击 XML dos xdos
  • 从 PowerShell 调用 exe 并获取有关成功或失败的反馈

    如何在 PowerShell 中运行可执行文件并通过 if 语句确定它是成功还是失败 更具体地说 我试图让 devenv exe 从 PowerShell 脚本构建解决方案 我需要知道它是成功还是失败 失败是指构建失败 并且我假设 deve
  • Ruby 将数组合并为一个字符串

    在 Ruby 中 有没有一种方法可以将所有数组元素组合成一个字符串 数组示例 arr p Hello World p p This is a test p 示例输出 p Hello World p p This is a test p Us
  • 为什么 C++ 中元组的使用不常见?

    为什么似乎没有人在 C 中使用元组 或者Boost元组库 http www boost org doc libs 1 39 0 libs tuple doc tuple users guide html或者 TR1 的标准库 我读过很多 C
  • 将组件对齐到所需位置

    寻求帮助来设计如下所示的布局 我面临的主要挑战是将组件对齐到所需的位置 请参考三个按钮 图标 及其位置 从字面上看 就是发疯 思考如何将它们准确地放置在所需的位置 任何帮助深表感谢 问候 罗尼 由于您使用了 Android 类别 我假设您正
  • 如何使用 JavaScript 触发“isTrusted=true”点击事件?

    我正在尝试使用 Chrome 扩展来模拟用户点击和鼠标移动 例如 在我的内容脚本中 有一个按钮单击 document querySelector SOME SELECTOR click 该行触发具有以下属性的单击事件 MouseEvent
  • Maven原型:修改artifactId

    在进行项目时 我的要求是创建一个模块 该命令将类似于 mvn archetype generate DarchetypeCatalog local DartifactId test module 并且目标应该具有以下文件结构 test mo
  • PJSIP 库中的 TLSv1_2 (TLS1.2) 支持

    我正在使用最新的PJSIP http www pjsip org 我的 Android iOS 应用程序中的库 我想在我的项目中使用 TLSv1 2 连接 PJSIP 支持哪个 TLS 版本 从源代码来看它似乎支持TLSv1 0 有没有办法
  • 如何获取checkbox的值

    如何获取复选框的值 var tb new Ext Toolbar tb add xtype checkbox boxLabel Expand Groups by Default id GetChkBoxValue checked true
  • 应用程序终止自身最暴力的方式是什么(linux)

    我想模拟暴力系统关闭 即在应用程序级别尽可能接近断电 我们正在讨论 Linux 上的 c c 应用程序 我需要应用程序自行终止 目前我看到几个选项 call exit http linux die net man 3 exit call e
  • SortedSet - 存储类对象时的自定义顺序

    我正在考虑用 SortedSet 替换 HashSet 因为它更适合我存储的数据 然而 到目前为止我看到的所有示例都与存储简单对象有关 整数 字符串等 我想为具有多个属性的自定义类实现此功能 但是该类还包含一个我想用作 索引器 的日期 问题
  • 将长时间运行的任务分配到多个帧上的最佳方法是什么?

    我有多个长时间运行的任务 例如超过 10 毫秒 这会影响浏览器的响应能力 最糟糕的事情 例如从文件加载和解析 3D 模型 已经被卸载到 Web Workers 这样它们就不会影响渲染循环 然而 有些任务不容易移植到 Workers 因此必须
  • 警告:sprintf() [function.sprintf]:第 132 行 /home/inrunitc/public_html/chek/chek.php 中的参数太少

    Warning sprintf function sprintf Too few arguments in home inrunitc public html chek chek php on line 132 Query was empt
  • 在hive中向外部表添加分区需要花费大量时间

    我想知道向外部表添加分区的最佳方法是什么 我在 hive 的 S3 上有一个外部表 分区为 车辆 日期 小时 现在 可以在一天中的任何时间添加新车辆 并且有些车辆在一天中的几个小时或几天内没有数据 几种可能的解决方案 msck修复表 需 要
  • 如何解决 Apache-Beam 中的 Beam DeprecationWarning

    第一的 生成简单数据后将数据存储在谷歌云平台bigQuery表中的代码 导入 Apache Beam 库并使用它 跑步者使用了 Google Cloud Platform Dataflow 这里是代码 from apache beam op
  • numpy.dot -> MemoryError,my_dot -> 非常慢,但有效。为什么?

    我正在尝试计算两个大小分别为 162225 10000 和 10000 100 的 numpy 数组的点积 但是 如果我调用 numpy dot A B 则会发生 MemoryError 然后 我尝试编写我的实现 def slower do