尝试使用 numpy 向量化迭代计算

2023-11-24

我试图通过使用 numpy 中的向量化形式来使某些代码更有效。让我给你举个例子,这样你就明白我的意思了。

给出以下代码:

a = np.zeros([4,4])
a[0] = [1., 2., 3., 4.]
for i in range(len(a)-1):
    a[i+1] = 2*a[i]
print a

它输出

[[  1.   2.   3.   4.]
 [  2.   4.   6.   8.]
 [  4.   8.  12.  16.]
 [  8.  16.  24.  32.]]

当我现在尝试像这样矢量化代码时:

a = np.zeros([4,4])
a[0] = [1., 2., 3., 4.]
a[1:] = 2*a[0:-1]
print a

我刚刚得到第一次迭代正确:

[[ 1.  2.  3.  4.]
 [ 2.  4.  6.  8.]
 [ 0.  0.  0.  0.]
 [ 0.  0.  0.  0.]]

是否可以以矢量化形式有效地编写上面的代码(下一次迭代总是访问上一次迭代),或者我是否必须保留for loop?


像这样的线性递推可以使用以下方法计算scipy.signal.lfilter:

In [19]: from scipy.signal import lfilter

In [20]: num = np.array([1.0])

In [21]: alpha = 2.0

In [22]: den = np.array([1.0, -alpha])

In [23]: a = np.zeros((4,4))

In [24]: a[0,:] = [1,2,3,4]

In [25]: lfilter(num, den, a, axis=0)
Out[25]: 
array([[  1.,   2.,   3.,   4.],
       [  2.,   4.,   6.,   8.],
       [  4.,   8.,  12.,  16.],
       [  8.,  16.,  24.,  32.]])

请参阅以下内容了解更多详细信息:python 时间序列递归向量化, Pandas 中的递归定义


请注意,使用lfilter仅当您正在解决非齐次问题(例如)时才有意义x[i+1] = alpha*x[i] + u[i], where u是给定的输入数组。对于简单的复现a[i+1] = alpha*a[i],您可以使用精确解a[i] = a[0]*alpha**i。多个初始值的解决方案可以使用广播进行矢量化。例如,

In [271]: alpha = 2.0

In [272]: a0 = np.array([1, 2, 3, 4])

In [273]: n = 5

In [274]: a0 * (alpha**np.arange(n).reshape(-1, 1))
Out[274]: 
array([[  1.,   2.,   3.,   4.],
       [  2.,   4.,   6.,   8.],
       [  4.,   8.,  12.,  16.],
       [  8.,  16.,  24.,  32.],
       [ 16.,  32.,  48.,  64.]])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试使用 numpy 向量化迭代计算 的相关文章

随机推荐

  • 与 javascript 或 jquery 中的 .some() 方法等效吗?

    正在寻找 与 javascript 中的某些方法等效 和 如果在数组中则仅返回一个值 但只看到了确定变量类型的方式的答案 或者有太多不必要的答案 我绕过 html 中的所有输入 我想要这样的东西 goodsFilter find input
  • 使用 Javascript 读出 KML 文件

    我有一个包含城市区的 KML 文件 想用 Javascript 读出它 以便在地图上显示这些叠加层 多边形 Google Maps API v 3 此外 我想从 KML 文件中保存 GeoPoints 和对象中的区域名称 但我不知道该怎么做
  • MVC Html.ActionLink 从 URL 中删除空查询字符串参数

    我正在使用Html ActionLink string linkText string actionName object routeValues 重载以将一些参数发送到操作方法 有时我需要传递一个空参数值 例如 item1 item2 v
  • 如何从reactjs组件访问“key”属性

    我怎样才能访问key组件的属性 我以为它会在 this props 中 但事实并非如此 e g
  • 如何使用 ConstraintLayout 设置 DimensionRatio 的 maxHeight?

    我正在尝试显示以父级为中心的图像 尺寸比为 1220 1000 最大高度为 300dp 即使在大屏幕下也能保持图像较小
  • 在 C# 中哪里可以找到机器 epsilon?

    机器 epsilon 被规范地定义为与 1 相加得到的结果与 1 不同的最小数字 有一个Double Epsilon但这个名字很容易让人误解 它是最小的 非规范化的 Double值可表示 因此对于任何类型的数字编程都是无用的 我想得到tru
  • 从图像中查找车辆的速度

    我正在做一个项目 从图像中查找车辆的速度 我们正在车内拍摄这些图像 我们将标记第一张图像中的一些对象作为参考 利用下一张图像中同一物体的属性 我们必须计算移动车辆的速度 有人能帮我一下吗 我正在使用 python opencv 我已经成功
  • 将 XSLT 2.0 与 PHP 结合使用的最佳方法是什么?

    这是我在网站上的第二个问题 像往常一样 我花了几个小时阅读了很多相关问题 最相关的两个是 XPath 2 0 和 或 XSLT 2 0 是否会在 PHP 中实现 其中解释了使用 PHP Java Bridge 和 Saxon 的解决方案 A
  • 为什么 babel 将导入的函数调用重写为 (0, fn)(...) ?

    给定一个输入文件 例如 import a from b function x a babel 会将其编译为 use strict var b require b function x 0 b a 但是当以松散模式编译时 函数调用输出为 b
  • WaitForSingleObject - 等待的线程是否形成队列?

    如果我设置 3 个线程来等待互斥锁被释放 它们是根据请求的顺序形成一个队列还是未定义的行为 即我们不知道哪个线程会先获取它 它明确记录在SDK文章 如果多个线程正在等待互斥体 则选择一个等待线程 不要假设先进先出 FIFO 顺序 外部事件
  • 如何在 iPhone 上使用滚动视图?

    我想显示包含很多行的文本 我向滚动视图添加了多行标签 但它没有显示任何内容 看起来这不是使用滚动视图的正确方法 如何使用滚动视图以便用户可以向下拖动以查看更多文本 Apple s UIScollView 文档相当不错 你应该从那里开始并理解
  • 通过 JNI 更快的 Math.exp() ?

    我需要计算Math exp 非常频繁地从 java 中获取 是否有可能让本机版本运行得比java s Math exp 我只尝试了 jni C 但它比普通的慢java 这已经被多次请求 参见例如here 这是 Math exp 的近似值 复
  • LINQ 可以在 PowerShell 中使用吗?

    我正在尝试在 PowerShell 中使用 LINQ 看起来这应该是完全可能的 因为 PowerShell 是构建在 NET Framework 之上的 但我无法让它工作 例如 当我尝试以下 人为的 代码时 data 0 10 System
  • 如何使用多个 WCF 服务实例强制执行消息队列顺序

    我想创建一个使用 MSMQ 绑定的 WCF 服务 因为该服务要处理大量通知 重要的是 客户端不会被服务阻塞 并且通知按照它们发出的顺序进行处理 因此队列实现也是如此 另一个考虑因素是弹性 我知道我可以对 MSMQ 本身进行集群以使队列更加健
  • Apache Spark:使用文件夹结构来减少分析的运行时间

    我想通过将一个巨大的 csv 文件根据其特征细分为不同的分区来优化 Spark 应用程序的运行时 例如 我有一个包含客户 ID 的列 整数 a 一个包含日期的列 月 年 例如 01 2015 b 以及一个包含产品 ID 的列 整数 c 以及
  • Mockito / Powermockito 模拟私有 void 方法

    我需要使用mockito和powermock模拟一个不带参数的私有void方法 该方法属于一个间谍实例 我知道我需要这样做的事实表明代码很糟糕 但我正在处理一个旧项目 将单元测试从一个测试框架转换为另一个测试框架 如果有人有任何建议 我们将
  • 在 Windows 7 64 位上安装 pycuda-2013.1.1

    仅供参考 我有 64 位版本的 Python 2 7 和 我跟着pycuda安装说明安装pycuda 我运行以下脚本没有任何问题 import pycuda driver as cuda import pycuda autoinit fro
  • 在 Rmarkdown HTML 输出中禁止来自 RStan 的运行消息

    以下是我的 r 代码 r message FALSE warning FALSE cache 0 eval TRUE error FALSE stan m1 lt rethinking map2stan alist y dbinom n p
  • 如何创建紧凑型材

    我在谷歌上搜索找到一种在 Java 1 8 中创建紧凑配置文件的方法 是否可以创建紧凑配置文件 因为Here说它仅适用于嵌入式版本 简短回答 JEP 161说配置文件必须在 Java 8 中 确实如此 要创建它们 请使用make profi
  • 尝试使用 numpy 向量化迭代计算

    我试图通过使用 numpy 中的向量化形式来使某些代码更有效 让我给你举个例子 这样你就明白我的意思了 给出以下代码 a np zeros 4 4 a 0 1 2 3 4 for i in range len a 1 a i 1 2 a i