滑动窗口操作的 Numpy 矢量化

2023-12-21

我有以下 numpy 数组:

arr_1 = [[1,2],[3,4],[5,6]]   # 3 X 2 
arr_2 = [[0.5,0.6],[0.7,0.8],[0.9,1.0],[1.1,1.2],[1.3,1.4]]  # 5 X 2

arr_1显然是一个3 X 2数组,而arr_2 is a 5 X 2 array.

现在,无需循环,我想按元素乘以 arr_1 和 arr_2,以便对 arr_2 应用滑动窗口技术(窗口大小 3)。

Example:

Multiplication 1:  np.multiply(arr_1,arr_2[:3,:])

Multiplication 2: np.multiply(arr_1,arr_2[1:4,:])

Multiplication 3: np.multiply(arr_1,arr_2[2:5,:])

我想以某种矩阵乘法形式执行此操作,以使其比我当前的解决方案更快,其形式为:

for i in (2):
   np.multiply(arr_1,arr_2[i:i+3,:])  

因此,如果 arr_2 中的行数很大(数万量级),则该解决方案的扩展性并不是很好。

任何帮助将非常感激。


我们可以用NumPy broadcasting http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html以矢量化方式创建这些滑动窗口索引。然后,我们可以简单地索引到arr_2与那些创造一个3D数组并执行逐元素乘法2D array arr_1,这反过来又会带来broadcasting again.

所以,我们会有一个像这样的矢量化实现 -

W = arr_1.shape[0] # Window size
idx = np.arange(arr_2.shape[0]-W+1)[:,None] + np.arange(W)
out = arr_1*arr_2[idx]

运行时测试并验证结果 -

In [143]: # Input arrays
     ...: arr_1 = np.random.rand(3,2)
     ...: arr_2 = np.random.rand(10000,2)
     ...: 
     ...: def org_app(arr_1,arr_2):
     ...:     W = arr_1.shape[0] # Window size
     ...:     L = arr_2.shape[0]-W+1
     ...:     out = np.empty((L,W,arr_1.shape[1]))
     ...:     for i in range(L):
     ...:        out[i] = np.multiply(arr_1,arr_2[i:i+W,:])
     ...:     return out
     ...: 
     ...: def vectorized_app(arr_1,arr_2):
     ...:     W = arr_1.shape[0] # Window size
     ...:     idx = np.arange(arr_2.shape[0]-W+1)[:,None] + np.arange(W)
     ...:     return arr_1*arr_2[idx]
     ...: 

In [144]: np.allclose(org_app(arr_1,arr_2),vectorized_app(arr_1,arr_2))
Out[144]: True

In [145]: %timeit org_app(arr_1,arr_2)
10 loops, best of 3: 47.3 ms per loop

In [146]: %timeit vectorized_app(arr_1,arr_2)
1000 loops, best of 3: 1.21 ms per loop
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

滑动窗口操作的 Numpy 矢量化 的相关文章

随机推荐

  • 信号分配在进程中如何工作?

    我了解到信号在遇到表达式时不会立即改变 而是在进程结束时立即改变 在此示例中 signal x y z bit process y begin x lt y z lt not x end process 这个例子是这样说的 如果信号 y 发
  • 我无法获得正确的 StoreContext

    我已将我的应用程序提交到 Windows 应用商店并通过了认证 根据测试说明 https learn microsoft com en us windows uwp monetize in app purchases and Trials
  • 如何配置简单注入器 IoC 以使用 RavenDB

    我在用着简易注射器 http simpleinjector codeplex com用于 MVC 3 Web 应用程序中的 IOC 我在用RavenDB http ravendb net用于数据存储 在 mvc 3 应用程序中使用 Rave
  • Spyder 中的简单 Python 多重处理函数不输出结果

    我在这里有一个非常简单的函数 我试图在其中运行和测试 但是 它不会输出任何内容 也没有任何错误 我多次检查了代码 但没有任何错误 我打印了作业 这就是我得到的
  • 阻止对 Redis 密钥的访问 (ServiceStack)

    我正在尝试使用 ServiceStack Redis 客户端来实现我认为非常常见的缓存场景 但我很难找到一个很好的例子 在 ASP NET MVC 应用程序中 我们对外部 Web 服务进行相对长时间运行 且按计量 的调用 并将结果缓存一段时
  • 函数调用中的多个括号

    我对这个 Scala 表示法有点困惑 List 1 2 3 foldLeft 0 x acc gt acc x 0 和函数都是foldLeft的参数 为什么它们被传递到两个相邻的括号组中 我认为这是可行的 List 1 2 3 foldLe
  • XNA 与 DirectX 的比较 (C#)

    在PC开发方面 不包括Xbox和Zune XNA 和 C DirectX 有什么区别 C DirectX 是否比 XNA 具有显着优势 在速度 版税等方面 与非托管 C DirectX 相比 两者的速度如何 游戏编程行业正在走向何方 如果您
  • if 语句之外的变量访问

    我正在尝试访问 java 中 if 语句之外的变量 变量是axeMinDmg 这是我所拥有的 但出现错误 我想minDmg axeMinDmg thanks SuppressWarnings unused public static voi
  • 我应该使用哪种算法进行信号(声音)一类分类?

    Update我总结了问题及其答案here https jaderdias github io posts signal one class classification 我的目标是检测噪声信号中给定模式的存在 我想检测一种用麦克风记录声音的
  • 无论 Zsh 中的上下文如何,都将密钥绑定到完整的文件名

    有时我想要一个文件名 而不是 zsh 为我猜测的文件名 例如 我有一个 PNG 文件 没有正确的 png后缀 这会让 zsh 认为它不是图片 并且在我输入时不会列出它Tab完成论证display 我想知道是否有一个关键序列可以在上下文所在的
  • 如何在WebFilter的实现中获取路径变量? (服务器网络交换)

    我在 Spring Reactive 应用程序中工作 我知道如何使用 HttpServletRequest 在拦截器中获取 PathVariable 有些类似 request getAttribute HandlerMapping URI
  • 如何使 LWP::UserAgent 看起来像另一个浏览器?

    这是我关于 SO 的第一篇文章 所以要温柔 我什至不确定这是否属于这里 但就在这里 我想访问我的一个个人帐户上的一些信息 该网站写得不好 需要我手动输入我想要的信息的日期 这确实是一种痛苦 我一直在寻找一个学习更多 Perl 的借口 所以我
  • 带有参数的量角器“addMockModule()”在 Firefox 中无法正确处理结构化数据

    我最近阅读了有关这些量角器问题的解决方案 无法轻松地将上下文传递给addMockModule 695 https github com angular protractor issues 695 feat addMockModule 添加第
  • Angular ng-click 不适用于 $compile

    我有类似于下面的代码来触发clickAngular 应用程序中的事件 为什么事件没有触发 var app angular module myApp app directive myTop function compile return re
  • Scala问题可选构造函数

    想象一下这段简单的代码 class Constructor var string String def this s String this string s def testMethod println string testMethod
  • 如何在xamarin中浏览sqlite数据?

    我的应用程序中有一个列表视图 一些数据在填充列表视图之前保存到数据库中 我的问题是看不到数据 以及如何验证数据是否存储在数据库中 我给出了 Visual Studio 2015 的解决方案 适用于 Xamarin 找到上图中提到的数据库文件
  • Twitter4j:调用 getFollowersIDs 时出现不一致的身份验证错误

    我正在使用 Twitter4j 版本 3 0 3 我正在尝试提取关注者 ID 并使用 OAuth 我已经使用 Twitter4j 多年 并且对该框架比较有经验 然而 奇怪的事情发生了 我的程序将运行良好 然后间歇性地抛出以下堆栈跟踪 Exc
  • 如何从照片自定义相册中获取图像,iOS SDK?

    I m working on an iOS app in which I need gallery view like Instagram I have added gallery View camera View and video Vi
  • 使用命令行参数运行 webpack

    我一直在尝试将 args 从命令行传递到 webpack 插件 我可以通过 process argv 访问参数 但之后 wwebpack 失败并出现错误 未找到条目模块中的错误 错误 无法解析模块 看来 webpack 将 args 视为它
  • 滑动窗口操作的 Numpy 矢量化

    我有以下 numpy 数组 arr 1 1 2 3 4 5 6 3 X 2 arr 2 0 5 0 6 0 7 0 8 0 9 1 0 1 1 1 2 1 3 1 4 5 X 2 arr 1显然是一个3 X 2数组 而arr 2 is a