计算数组的期望,速度改进的建议

2024-01-16

我有一个 (N0, N1, N2, N3) 矩阵 V 和一个 (N1, N1) 矩阵 M。N1 通常约为 30-50,N0xN1xN2xN3 约为 1 000 000。我想要一个新的 Matrix EV,其中 i0 , i1, i2, i3 条目由下式给出

np.sum(V[i0, :, i2, i3] * M[i1, :])    

我当前实现这一目标的代码是:

  V_exp = np.tile(V[:, :, :, :, None], (1, 1, 1, 1, N1))
  M_exp = np.tile(M.T[None, :, None, None, :], (N0, 1, N2, N3, 1))
  EV = np.sum(V_exp * M_exp, axis = 1)
  EV = np.rollaxis(EV, 3, 1)

我必须多次执行此操作,这是我的代码的绝对瓶颈。我想知道我的代码是否有提高速度的潜力。我感谢建议!


一次调用np.einsum http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.einsum.html扩展后会一次性执行所有这些操作V to a 5D形状与np.newaxis/None http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#numpy.newaxis,就像这样-

EV  = np.einsum('ijklm,mj->imkl',V[...,None],M)

因此,我们避免使用任何中间数组来实现内存高效的解决方案。

解释

(1) 涉及扩展维度的起始代码:

V_exp = np.tile(V[:, :, :, :, None], (1, 1, 1, 1, N1))
M_exp = np.tile(M.T[None, :, None, None, :], (N0, 1, N2, N3, 1))
output1 = V_exp * M_exp

In np.einsum的方式,它会被翻译为:

np.einsum('ijklm,mj->ijklm',V[...,None],M)

请注意,我们已经使用了mj而不是通常的jm for M对应于M.T[None, :, None, None, :].

(2) 接下来,我们有:

EV = np.sum(V_exp * M_exp, axis = 1)

因此,我们总结一下axis = 1,所以 einsum 调用需要输出字符串说明符被改变自->ijklm to ->iklm.

(3)最后:

EV = np.rollaxis(EV, 3, 1)

对于本次移植rollaxis,我们只需要push up axis=3 to axis=1的位置和下推每一个axes=1,2向右一个位置。就这样输出字符串说明符会改变自->iklm to ->imkl给我们:

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

计算数组的期望,速度改进的建议 的相关文章

  • 格式化多维数组 Python

    如何编写代码来更改多维数组中每个单独数组的值a出现负值后立即归零 所以里面的第二个数组a有负值 12 34 5 6 88 10 30 75 10 会将其所有值及其后的值转为零 将数组变成 12 34 5 6 88 0 0 0 我怎样才能获得
  • 读取文本文件并将列存储在数组中

    我的文件看起来像这样 01 01 5 00 1 50 7 50 02 01 4 00 3 00 12 00 02 02 3 00 4 00 12 00 03 01 4 50 3 00 13 50 03 01 7 50 2 50 18 75
  • 调整ArrayBuffer的大小

    如果我想创建一个数组缓冲区 我会写 var buff new ArrayBuffer size 但是如何调整现有缓冲区的大小呢 我的意思是 在缓冲区末尾添加更多字节 ArrayBuffer 本身没有设置 有set https develop
  • 如何创建没有循环关系的树形表?

    CREATE TABLE TREE node1 id UUID REFERENCES nodes object id NOT NULL node2 id UUID REFERENCES nodes object id NOT NULL CO
  • 显示和随机化 php 数组

    我有一个显示结果的数组 如下所示 Array 0 gt 71 1 gt 56 2 gt 64 3 gt 82 4 gt 90 5 gt 80 6 gt 65 7 gt 62 8 gt 14 9 gt 3 我的代码是 while row my
  • 如何在 Debian 上的 virtualenv 中安装 numpy?

    注 参见这另一篇文章 https stackoverflow com questions 6442754 how to install h5py numpylibhdf5 as non root on a debian linux syst
  • 通过 python 中的另外两个修改数组[重复]

    这个问题在这里已经有答案了 假设我们有三个一维数组 A 长度为 5 B 长度相同 示例中为5 C 更长 比如长度为 100 C最初用零填充 A给出索引C应更改的元素 它们可能会重复 以及B给出应添加到初始零的值C 例如 如果A 1 3 3
  • 如何循环遍历对象数组并生成键值对?

    我有一个像这样的对象数组 let someObj items id 12 value true id 34 value true id 56 value false 我想将其添加到现有对象中 其中 id 是该对象的键 如下所示 let ob
  • 正在使用 PIL 保存损坏的图像

    我遇到一个问题 操作图像像素导致保存损坏的图像 因此 我使用 PIL 打开图像 然后将其转换为 NumPy 数组 image Image open myimage png np image np asarray image 然后 我转置图像
  • jQuery / Ajax:如何循环遍历数组作为 Ajax 成功函数的一部分

    我有一个阿贾克斯调用返回一个数组并需要对该数组中的每个值执行某些操作 到目前为止 我有以下内容 但这会返回以下错误 Uncaught TypeError Cannot use in operator to search for length
  • 正则表达式库基准

    我最近一直想知道正则表达式实现的性能 并且很难想出很多有用的信息 它很容易对浏览器 javascript 正则表达式性能进行基准测试 网上有很多工具 Chrome 和 Opera 中的 javascript 正则表达式实现几乎摧毁了所有其他
  • 为什么改变对象的 [[prototype]] 会降低性能?

    来自 MDN 文档standard setPrototypeOf功能 https developer mozilla org en US docs Web JavaScript Reference Global Objects Object
  • Javascript 播放声音性能重吗?

    我正在用 Javascript 制作一个简单的游戏 当一个物体与墙壁碰撞时 它会发出 砰 的声音 声音的响度取决于物体的速度 速度越高 gt 声音越大 播放功能 playSound function id vol ID of the sou
  • 合并张量流数据集批次

    请考虑下面的代码 import tensorflow as tf import numpy as np simple features np array 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 simple labels
  • 将 numpy 舍入到最近的步骤

    我想知道如何将 numpy 中的数字舍入到上限或下限阈值 该阈值是预定义步长的函数 希望以更清晰的方式说明 如果我有数字 123 且步长等于 50 我需要将 123 舍入到最接近的 150 或 100 在本例中为 100 我得出了下面的函数
  • 从零开始的 numpy 形状意味着什么

    好的 我发现数组的形状中可以包含 0 对于将 0 作为唯一维度的情况 这对我来说是有意义的 它是一个空数组 np zeros 0 但如果你有这样的情况 np zeros 0 100 让我很困惑 为什么这么定义呢 据我所知 这只是表达空数组的
  • 按范围迭代数组

    我有一个数组 1 2 3 4 5 6 100 我希望将此数组迭代 5 次 具体来说 取数组的前 5 个数字并获取平均值 继续处理接下来的 5 个数字并获取平均值 依此类推 我尝试过多种方法 例如Dequeue和 for 循环但未能获得所需的
  • 使用 json_encode() 函数在 PHP 数组中生成 JSON 键值对

    我正在尝试以特定语法获取 JSON 输出 这是我的代码 ss array 1 jpg 2 jpg dates array eu gt 59 99 us gt 39 99 array1 array name gt game1 publishe
  • 将数组排序为第一个最小值、第一个最大值、第二个最小值、第二个最大值等

    编写一个JS程序 返回一个数组 其中第一个元素是第一个最小值 第二个元素是第一个最大值 依此类推 该程序包含一个函数 该函数接受一个参数 一个数组 该函数根据要求返回数组 输入示例 array 2 4 7 1 3 8 9 预期输出 1 9
  • 结构体指针的动态数组

    我必须使用以下代码块来完成学校作业 严格不进行任何修改 typedef struct char firstName char lastName int id float mark pStudentRecord pStudentRecord

随机推荐

  • 为什么php命令行无法获取ip地址?

    我的 var www read php 中只有一行 并在本地计算机 127 0 0 1 上构建我的灯 echo SERVER REMOTE ADDR 当输入 127 0 0 1 read php 时 我得到输出 127 0 0 1 何时在控
  • scipy curve_fit 无法拟合 tophat 函数

    我正在尝试将高帽函数拟合到某些数据 即 f x 对于整条实数线来说是常数 但有限长度的一段除外 它等于另一个常数 我的参数是 tophat 函数的两个常量 中点和宽度 我尝试使用 scipy optimize curve fit 来获取所有
  • Go 依赖于 C 运行时吗?

    我找不到 Go 依赖于 C 运行时的信息吗 如果依赖的话 是否静态编译成二进制文件 使得Go编写的应用程序可以在任何地方运行而无需依赖 这里的主题是关于什么是 C 运行时 https stackoverflow com questions
  • Android Java 文本转语音查看额外字符串信息

    我已经浏览了许多适用于 Android 的文本到语音示例 并且我遇到了一个我认为非常简单的问题 但我一生都无法解决它 我只是希望能够查看 EXTRA AVAILABLE VOICES 的输出 例如 根据这个链接 http developer
  • 如何在没有任何.xml配置的情况下使用spring 3.X注释

    我是 Spring 新手 我不喜欢使用 xml 作为 spring 配置 所以我只想使用注释 以下是我的测试代码 它在没有 spring 的情况下运行良好 但是如果我使用 DI 并添加注释 Resource 我会得到 NullPointEx
  • 无法弄清楚如何在 while 循环内正确递增变量,C

    编辑 在我的 IDE 中重写代码后 今天我第八次犯了菜鸟错误 给我的输入提供了错误的数据类型 该错误已被修复 但我的输出仍然不正确 关于我的目标的详细信息 在进行找零时 您很可能希望最大限度地减少为每个客户分发的硬币数量 好吧 假设收银员欠
  • PHP 与 BASH 的 CLI 脚本比较? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我从未在 CLI 中使用过 PHP 但我见过使用 PHP 代码运行的脚本 我想知道 当 PHP 如此流行并且能够在 CLI 中运行时 我们为什么
  • Flash 游戏服务器建议(Node.js、Red5 等)

    快速总结 我们已经完成了一个类似于俄罗斯方块的 Flash 游戏 可以 链接 进行多人游戏 做了一些研究并在这里询问后 闪存套接字 点对点功能 https stackoverflow com questions 6921292 flash
  • 如何通过不同页面(上下文)共享来自 Streambuilder 的提供者数据

    我想在小部件上实时获取来自 firebase 的数据 当我尝试使用StreamProvider然后使用Navigator push 推送的小部件无法获取值Provider of context 我尝试把StreamProvider作为的父母
  • ASP.NET Core 5 MVC:httpContext.User 未在自定义 CultureProvider 中进行身份验证

    我必须在我的网络应用程序中添加本地化 请求是 grpc 服务将为所有用户提供默认语言 因此在启动时我尝试读取该值 但不知道如何在 new 中使用注册的服务CustomRequestCultureProvider public static
  • Android 上的库项目的独立测试项目

    我的问题是 如何创建 Android独立的Android 库的测试项目 我有我的安卓机library 在项目设置中标记为 库 和一个包含我的 JUnit 测试类的 Android 项目 这test项目正确引用了 Android 库 在 An
  • 在事务内的 Access 中执行 UPDATE SQL 时超出系统资源

    我正在执行一个简单的UPDATE tblTable SET DataSet 3在一个事务内 但在尝试运行它几秒钟后 我收到 3035 系统资源超出 大约有 30K 行 Dim db As DAO Database wrk As DAO Wo
  • 使用seaborn调整子图的大小

    我最近刚刚开始使用 matplotlib 和 seaborn 来绘制我的图表 这是我到目前为止编写的代码 count 1 l 13 0 47 29 10 plt figure figsize 30 40 for ww in l temp d
  • 如何使用运算符<<打印类对象

    我想为 AutoData 类编写一个打印函数 其中包含有关汽车的信息 通过这个打印函数 我理想地希望打印出包含许多不同类对象的向量 我已经为对象的每个元素编写了 get 函数 但我仍然有点不确定如何使用这些函数来编写函数以以下格式打印数据
  • javafx webview 无法正确显示 html 页面

    当我测试这个示例程序时 webview 无法正确显示 html 页面 第一页 第一个圆圈 显示正确 但 它应该每 10 秒更改一次页面 但事实并非如此 它应该显示图表 当您单击第二个圆圈时 但它没有 它应该显示显示图像 当您单击第三个圆圈时
  • Android Ant 错误:解析为没有项目的 project.properties 文件的路径

    我在 Ant 脚本中执行此操作 我链接一个库项目 更新它们并构建它们 但我不断在标题中收到此错误 有人知道如何解决这个问题吗
  • 我的聪明人有未知标签,但它是合法标签

    目前我更改 smarty 2 gt 版本 3 但我改变后出现了如下问题 SmartyCompilerException Syntax Error in template home test engine mobile9 template t
  • 通过其他表更新第二个表中的数据

    我有 3 个表 我想用第三个表和第四个表更新第二个表中的第一个表 table1和table2中的ID是唯一的 table3和table4中的ID是唯一的 在表2和表3中 uid是唯一的 但我也需要检查另一个值 源 table1 ID val
  • C 中文本查找的通用枚举

    Update 给出的代码确实有效 当我认为没有的时候我就错了 我的错 对不起 如果您可以改进代码 请在https codereview stackexchange com questions 150480 generic enum to t
  • 计算数组的期望,速度改进的建议

    我有一个 N0 N1 N2 N3 矩阵 V 和一个 N1 N1 矩阵 M N1 通常约为 30 50 N0xN1xN2xN3 约为 1 000 000 我想要一个新的 Matrix EV 其中 i0 i1 i2 i3 条目由下式给出 np