沿一维的 1D 数组和 3D 数组的有效乘积 - NumPy

2023-12-04

我有两个 numpy 数组:

  • 一个名为 t 的一维数组,形状为 (70L,),其元素名为 ti
  • 称为 I 的 3D 数组,形状为 (70L, 1024L, 1024L),每个元素称为 Ii。因此 Ii 的尺寸为 (1024L, 1024L)

我想沿第一维制作两个数组的乘积,即:

tI = t1*I1,t2*I2,...,tN*IN

例如再次获得一个新的维度为 (70L, 1024L, 1024L) 的数组,然后沿第一个维度求和以获得维度为 (1024L, 1024L) 的数组:

tsum = t1*I1 + t2*I2 + ... +tN*IN

目前我对执行以下操作感到满意:

tI = np.asarray([t[i]*I[i,:,:] for i in range(t.shape[0])])
tsum = np.sum(tI,axis=0)

但由于我的数组尺寸不断增加,速度会有点慢。 我想知道是否存在 numpy 或 scipy 函数,针对该特定任务进行了更优化?

预先感谢任何链接或信息。

Greg


您可以使用np.tensordot -

np.tensordot(t,I, axes=([0],[0]))

您还可以使用np.einsum -

np.einsum('i,ijk->jk',t,I)

运行时测试和输出验证 -

In [21]: def original_app(t,I):
    ...:     tI = np.asarray([t[i]*I[i,:,:] for i in range(t.shape[0])])
    ...:     tsum = np.sum(tI,axis=0)
    ...:     return tsum
    ...: 

In [22]: # Inputs with random elements
    ...: t = np.random.rand(70,)
    ...: I = np.random.rand(70,1024,1024)
    ...: 

In [23]: np.allclose(original_app(t,I),np.tensordot(t,I, axes=([0],[0])))
Out[23]: True

In [24]: np.allclose(original_app(t,I),np.einsum('i,ijk->jk',t,I))
Out[24]: True

In [25]: %timeit np.tensordot(t,I, axes=([0],[0]))
1 loops, best of 3: 110 ms per loop

In [26]: %timeit np.einsum('i,ijk->jk',t,I)
1 loops, best of 3: 201 ms per loop
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

沿一维的 1D 数组和 3D 数组的有效乘积 - NumPy 的相关文章

随机推荐

  • 使用 VBA 方法通过 Bing API 获取距离

    我试图通过 VBA 创建一个方法 当我使用此方法时 它显示 NAME 有时 value Public Function DISTANCE start As String dest As String key As String Dim fi
  • Objective-C UITableView 单元格图像

    所以我有一个UI表格视图Facebook 好友和一个单元格 我想将图像添加到其中 当我尝试以下代码时 cell imageView image UIImage imageWithData NSData dataWithContentsOfU
  • 从数据库或属性获取 Spring Security 拦截 url

    希望这非常简单 存在 并且我忽略了我眼皮底下的一些东西 我知道我可以通过注释限制访问 Secured ROLE ADMIN 或通过配置
  • UIButton标题消失

    我有一个 ViewController 里面有一个 UIButton 当我点击时 按钮上的文字消失了 我为所有状态添加了所有 setTitle 但它继续消失 任何想法 这是我的代码的一部分 interface AddCardViewCont
  • 重塑表格以将行转换为列

    我尝试搜索帖子 但只找到了 SQL Server Access 的解决方案 我需要 MySQL 5 X 中的解决方案 我有一个包含 3 列的表 称为历史记录 hostid itemname itemvalue 如果我做一个选择 select
  • 如何在 mysql C++ 连接器中设置超时

    我正在使用 C 连接器连接到 MySQL 服务器 当服务器离线或处于睡眠状态时 语句执行方法需要一段时间才能检测连接问题 是否有方法或变量来控制客户端的等待超时时间 Regards德瓦拉 古达 您可以使用mysql options设置客户端
  • Swift Spritekit 我检测到碰撞,但它多次读取碰撞

    AppImage我有一堵由 4 个不同颜色的矩形组成的墙 要穿过这堵墙 球的颜色必须与墙上的矩形的颜色相匹配 球将穿过墙壁 新的墙壁将会出现 然而 当我检测到这种碰撞时 我得到了多个碰撞读数 我已经通过打印死或活来测试这一点 并且它会多次打
  • Idea 中的 Tomcat。战争爆发:服务器未连接。部署不可用

    我正在尝试这个tutoial 我创建了新项目并运行它 TomCat 启动了 但之后什么也没发生 我可以手动在浏览器中打开http localhost 8080并查看 TomCat 主页 这意味着服务器可以启动 但是我无法打开index js
  • ajax成功后jQuery继续循环执行

    我有一个循环中的 jQuery ajax 调用 但是我不希望同时进行这些 ajax 调用 我需要先完成第一个 ajax 调用 然后再进行下一个调用 for var i 0 i lt options length i jQuery ajax
  • 在 python 中使用 enumerate() 时从列表中删除元素[重复]

    这个问题在这里已经有答案了 Object 是一个解码后的 json 对象 其中包含一个名为 items 的列表 obj json loads response body as unicode for index item in enumer
  • 如何使用 GAE 创建自动完成功能?

    我使用 jQuery UI自动完成小部件 我还有 GAE 数据存储 class Person db Model key name contains person id in format lastname firstname middlen
  • 如何将 JRE 捆绑到 Java 应用程序的 EXE 中? Launch4j 提示“运行时丢失或损坏。”

    我对 Java 编程很陌生 但总体上熟悉一切的工作原理 我希望能够将 jar 文件和 jre 放入 Windows 可执行文件 exe 中 这样当我分发它时 客户端不需要安装 JRE 我应该使用什么程序 我有 launch4j 它似乎完全符
  • WindowChrome - 无法单击标题栏中的按钮

    我的 WPF 应用程序有一个自定义 WindowChrome 样式 从此处摘取 http www bdevuyst com wpf custom title bar and taskbar 代码在这里
  • pygobject 中的拖放无响应

    我试图让拖放在 pygobject 中正常工作 但它很慢而且反应迟钝 90 的时间我必须挥动我正在拖动的项目才能成功放下它 任何人都可以看看我是否做得不正确或者这是 pygobject 的错误 这是我的代码 from gi reposito
  • 来自网络摄像头流的 Raspberry Pi 3 Python 和 OpenCV 人脸识别

    我尝试使用树莓派 3 型和摄像头模块通过 WiFi 网络传输视频 但发现与我在网上找到的其他示例存在一些不一致之处 我试图获得该视频中执行的第三次测试的结果 https www youtube com watch v sYGdge3T30o
  • 使用 Python 进程进行多处理

    我正在尝试使用 Process 将Python脚本修改为多进程 问题是它不起作用 第一步 按顺序检索内容 test1 test2 在第二个中 将并行调用它 test1 和 test2 实际上没有速度差异 如果单独执行这些函数 您会注意到差异
  • Android ActionBar setActionView布局问题

    我一直在尝试使用 ICS 中 ActionBar 中的 setActionView 看起来应该很简单 但不知怎的 我没有得到我希望的布局对齐 正如您在下图中看到的 目标 图标在其布局中正确居中 但是当我 setActionBar progr
  • 为什么新数组很慢?

    比较操作时 var fat cats cats slice to var fat cats new Array cats length 性能差异令人困惑 在 Firefox 和 Chrome 中new Array速度较慢 当它应该更快时 它
  • 如何正确使用__setattr__,避免无限递归

    我想定义一个包含以下内容的类read and write方法 可以按如下方式调用 instance read instance write instance device read instance device write 为了不使用交错
  • 沿一维的 1D 数组和 3D 数组的有效乘积 - NumPy

    我有两个 numpy 数组 一个名为 t 的一维数组 形状为 70L 其元素名为 ti 称为 I 的 3D 数组 形状为 70L 1024L 1024L 每个元素称为 Ii 因此 Ii 的尺寸为 1024L 1024L 我想沿第一维制作两个