计算复杂 numpy ndarray 的 abs()**2 的最节省内存的方法

2023-12-19

我正在寻找最节省内存的方法来计算复杂 numpy ndarray 的绝对平方值

arr = np.empty((250000, 150), dtype='complex128')  # common size

我还没有找到一个 ufunc 可以完全做到这一点np.abs()**2.

由于该大小和类型的数组占用大约半 GB,因此我正在寻找一种主要节省内存的方法。

我还希望它是可移植的,所以最好是 ufunc 的某种组合。

到目前为止我的理解是这应该是最好的

result = np.abs(arr)
result **= 2

它将不必要地计算(**0.5)**2,但应该计算**2到位。总而言之,峰值内存需求只是原始数组大小 + 结果数组大小,它应该是 1.5 * 原始数组大小,因为结果是真实的。

如果我想摆脱无用的东西**2打电话我必须做这样的事情

result = arr.real**2
result += arr.imag**2

但如果我没记错的话,这意味着我必须分配内存both实部和虚部计算,因此峰值内存使用量将为 2.0 * 原始数组大小。这arr.real属性还返回一个不连续的数组(但这不太重要)。

我有什么遗漏的吗?有没有更好的方法来做到这一点?

EDIT 1: 很抱歉没有说清楚,我不想覆盖 arr,所以我不能将其用作 out。


谢谢numba.vectorize http://numba.pydata.org/numba-doc/latest/user/vectorize.html在最新版本的 numba 中,为该任务创建 numpy 通用函数非常简单:

@numba.vectorize([numba.float64(numba.complex128),numba.float32(numba.complex64)])
def abs2(x):
    return x.real**2 + x.imag**2

在我的机器上,我发现与创建中间数组的纯 numpy 版本相比,速度提高了三倍:

>>> x = np.random.randn(10000).view('c16')
>>> y = abs2(x)
>>> np.all(y == x.real**2 + x.imag**2)   # exactly equal, being the same operation
True
>>> %timeit np.abs(x)**2
10000 loops, best of 3: 81.4 µs per loop
>>> %timeit x.real**2 + x.imag**2
100000 loops, best of 3: 12.7 µs per loop
>>> %timeit abs2(x)
100000 loops, best of 3: 4.6 µs per loop
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算复杂 numpy ndarray 的 abs()**2 的最节省内存的方法 的相关文章

随机推荐

  • 如何将c字符串转换为d字符串?

    这太简单了 我不好意思问 但是如何在 D2 中将 c 字符串转换为 d 字符串 我有两个用例 string convert const char c str string convert const char c str size t le
  • 当证书未过期时,axios 失败并显示“证书已过期”

    我正在使用 Axios 发布到远程 API 尽管它已经工作了好几年 但请求突然开始抛出错误 证书已过期 尽管证书尚未过期 该 API 的域有一个有效的 Let s Encrypt 证书 该证书在接下来的 2 个月内无法进行下一次自动续订 此
  • 使用 Heroku 进行 Fastify

    我有一个由 Heroku 托管的简单 Fastify 服务器 但是 似乎不起作用 但是 在开发过程中 似乎一切都好 我得到的错误是 Error R10 Boot timeout gt Web process failed to bind t
  • Perl 6 中的无论什么星 `&&` 无论什么星

    gt 20 5用于grep似乎是错误的 是否等于带有 2 个参数的WhateverCode lambda 正如这解释的那样SO https stackoverflow com questions 50245452 find last fri
  • 使用php的屏幕抓取技术

    如何筛选特定网站 我需要登录一个网站 然后抓取内部信息 这怎么可能做到呢 请指导我 复制 如何用 PHP 实现网络爬虫 https stackoverflow com questions 26947 how to implement a w
  • postgresql 无法将 INSERT 查询作为游标打开

    我正在尝试生成动态查询以将动态选择的结果插入表中 我的代码如下 CREATE OR REPLACE FUNCTION public report get result datekey integer RETURNS setof public
  • 在 JSON 模式中使用对象属性键作为枚举

    我正在尝试使用 JSON 架构验证 JSON 文件 以便找到 损坏的引用 的情况 本质上 我的文件由项目和组组成 每个项目都属于 groups 属性键引用的单个组 如下所示 items banana name Banana group fr
  • 尝试将构建上传到 iTunes Connect 时出错

    这篇文章涉及一个快速变化的事件 我在尝试将构建上传到 iTunes Connect 时遇到错误 这是我第一次看到这个错误 我无法解决它 我尝试遵循其他帖子的建议 但事实证明这并不成功 我尝试在 Xcode 中删除并重新添加我的帐户 让客户端
  • 如何递归删除目录?

    RemoveDirectory https learn microsoft com en us windows win32 api fileapi nf fileapi removedirectorya仅删除空目录 如何删除其中包含文件的目
  • PLSQL生成随机整数

    在 Oracle Sql Developer 11g 中 如何生成随机整数并将其分配给变量 这是我到目前为止所尝试过的 S TB SELECT dbms random value 1 10 num FROM dual 使用这段代码我得到了错
  • 我可以使用 RVM 为所有用户维护单一版本的 Ruby 吗?

    我喜欢RVM 我意识到它的主要用例是让不同的用户在不同版本的 Ruby 之间切换 但假设我正在将 Rails 应用程序部署到服务器 并且我只想运行单个版本的 Ruby 我特别想要 1 9 2 使用 RVM 安装它很轻松 但不使用它就很痛苦
  • laravel 非法偏移类型错误

    我有一个页面显示单个测试用例的详细信息 由于某种原因 我无法克服这个错误 甚至无法发送 id 这是我的控制器 public function show id data DB table TestCase gt where TestCaseI
  • IE10 websocketallowInsecureFromHttps

    我正在尝试实现一个 websocket 实现跨浏览器工作 在某些时候 我们将迁移到 wss 即加密的 websockets 但现在 都是 ws 当我们从 https 提供重定向到 ws 主机的页面时 我们会看到以下内容 铬还可以 如果将al
  • if 检查中的方法调用是否已“测试”然后“恢复”?

    我突然忘记了 if checks 中的方法调用是如何工作的 Example if list next instanceof AClass AClass thing list next 还是在这个例子中 如果next 迭代到列表中的下一个对象
  • 在动画集中运行多个动画时出现问题

    我正在尝试多次实现包含多个动画 平移 旋转和 Alpha 的动画集 这意味着动画完成并到达某个点后 它将使用不同的动画参数再次运行 我通过使用参数完成了这个setStartOffset 为了在动画中计时 但是 我遇到了一个问题 动画不是从其
  • 有代码风格强制执行者吗?

    我与许多其他程序员一起使用 PHP 编写的网站 有时我必须处理非常糟糕的代码 缩进完全混乱 花括号放在错误的位置 糟糕的空白使用 这真的伤害了我的眼睛 实际上让我的工作更加困难并且花费了更长的时间 是否有一个工具可以让您指定编码风格 然后将
  • Spring Test DBUnit 和表模式名称

    使用时是否可以设置表模式名称 DatabaseSetupSpring Test DBUnit 的注释 目前我正在这样使用它 DatabaseSetup user data xml public class UserMapperTest us
  • Swift iOS -UIImagePicker 的照片库在模拟器上显示,但在运行 Xcode 时在实际设备上崩溃(不会显示)

    我使用的是 Swift 3 iOS 10 3 和 Xcode 8 3 3 当我访问模拟器上的照片库时 UIImagePicker 没有出现任何问题 我可以选择照片 一旦我尝试访问实际设备 iPhone 7 上的照片库 应用程序就会崩溃 因为
  • 为什么 PHP 不打印 0 值?

    我一直在制作华氏温度到摄氏度 反之亦然 计算器 所有这些都工作得很好 但是当我尝试计算 32 华氏度到摄氏度时 它应该是 0 但却什么也不显示 我不明白为什么它不会回显 0 值 这是一些代码
  • 计算复杂 numpy ndarray 的 abs()**2 的最节省内存的方法

    我正在寻找最节省内存的方法来计算复杂 numpy ndarray 的绝对平方值 arr np empty 250000 150 dtype complex128 common size 我还没有找到一个 ufunc 可以完全做到这一点np