首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在Numpy中限制互相关窗宽?

如何在Numpy中限制互相关窗宽?
EN

Stack Overflow用户
提问于 2015-06-05 23:25:27
回答 8查看 6.8K关注 0票数 7

我正在学习numpy/scipy,来自MATLAB背景。xcorr function in Matlab有一个可选参数" maxlag“,它将lag的范围限制在-maxlag到maxlag之间。如果您正在查看两个非常长的时间序列之间的相互关系,但只对特定时间范围内的相关性感兴趣,这是非常有用的。考虑到交叉相关的计算成本非常高,性能的提升是巨大的。

在numpy/scipy中,似乎有几个计算互相关的选项。numpy.correlatenumpy.convolvescipy.signal.fftconvolve。如果有人想解释它们之间的区别,我很乐意听到,但主要困扰我的是,它们都没有maxlag特性。这意味着,即使我只想查看滞后在-20000和+20000毫秒之间的两个时间序列之间的相关性,它仍然会计算-100ms和+100毫秒(这是时间序列的长度)之间的每个滞后的相关性。这会带来200倍的性能损失!我是否必须手动重新编码互相关函数才能包含此功能?

EN

回答 8

Stack Overflow用户

发布于 2016-01-01 18:47:53

这里有几个函数可以在有限滞后的情况下计算自相关和互相关。选择乘法(在复杂情况下是共轭)的顺序,以匹配numpy.correlate的相应行为。

代码语言:javascript
运行
AI代码解释
复制
import numpy as np
from numpy.lib.stride_tricks import as_strided


def _check_arg(x, xname):
    x = np.asarray(x)
    if x.ndim != 1:
        raise ValueError('%s must be one-dimensional.' % xname)
    return x

def autocorrelation(x, maxlag):
    """
    Autocorrelation with a maximum number of lags.

    `x` must be a one-dimensional numpy array.

    This computes the same result as
        numpy.correlate(x, x, mode='full')[len(x)-1:len(x)+maxlag]

    The return value has length maxlag + 1.
    """
    x = _check_arg(x, 'x')
    p = np.pad(x.conj(), maxlag, mode='constant')
    T = as_strided(p[maxlag:], shape=(maxlag+1, len(x) + maxlag),
                   strides=(-p.strides[0], p.strides[0]))
    return T.dot(p[maxlag:].conj())


def crosscorrelation(x, y, maxlag):
    """
    Cross correlation with a maximum number of lags.

    `x` and `y` must be one-dimensional numpy arrays with the same length.

    This computes the same result as
        numpy.correlate(x, y, mode='full')[len(a)-maxlag-1:len(a)+maxlag]

    The return vaue has length 2*maxlag + 1.
    """
    x = _check_arg(x, 'x')
    y = _check_arg(y, 'y')
    py = np.pad(y.conj(), 2*maxlag, mode='constant')
    T = as_strided(py[2*maxlag:], shape=(2*maxlag+1, len(y) + 2*maxlag),
                   strides=(-py.strides[0], py.strides[0]))
    px = np.pad(x, maxlag, mode='constant')
    return T.dot(px)

例如,

代码语言:javascript
运行
AI代码解释
复制
In [367]: x = np.array([2, 1.5, 0, 0, -1, 3, 2, -0.5])

In [368]: autocorrelation(x, 3)
Out[368]: array([ 20.5,   5. ,  -3.5,  -1. ])

In [369]: np.correlate(x, x, mode='full')[7:11]
Out[369]: array([ 20.5,   5. ,  -3.5,  -1. ])

In [370]: y = np.arange(8)

In [371]: crosscorrelation(x, y, 3)
Out[371]: array([  5. ,  23.5,  32. ,  21. ,  16. ,  12.5,   9. ])

In [372]: np.correlate(x, y, mode='full')[4:11]
Out[372]: array([  5. ,  23.5,  32. ,  21. ,  16. ,  12.5,   9. ])

(如果numpy本身有这样的特性就好了。)

票数 8
EN

Stack Overflow用户

发布于 2017-12-19 19:20:16

在numpy实现maxlag参数之前,您可以从pycorrelate package使用函数ucorrelateucorrelate对numpy数组进行操作,并具有maxlag关键字。它使用for循环实现关联,并使用numba优化执行速度。

具有3个时间延迟的示例-自相关:

代码语言:javascript
运行
AI代码解释
复制
import numpy as np
import pycorrelate as pyc

x = np.array([2, 1.5, 0, 0, -1, 3, 2, -0.5])
c = pyc.ucorrelate(x, x, maxlag=3)
c

结果:

代码语言:javascript
运行
AI代码解释
复制
Out[1]: array([20,  5, -3])

pycorrelate文档包含显示pycorrelate.ucorrelatenumpy.correlate之间完美匹配的a notebook

票数 5
EN

Stack Overflow用户

发布于 2015-06-06 07:37:23

matplotlib.pyplot提供了类似matlab的语法,用于计算和绘制互相关、自相关等。

您可以使用允许定义maxlags参数的xcorr

代码语言:javascript
运行
AI代码解释
复制
    import matplotlib.pyplot as plt


    import numpy  as np


    data = np.arange(0,2*np.pi,0.01)


    y1 = np.sin(data)


    y2 = np.cos(data)


    coeff = plt.xcorr(y1,y2,maxlags=10)

    print(*coeff)


[-10  -9  -8  -7  -6  -5  -4  -3  -2  -1   0   1   2   3   4   5   6   7
   8   9  10] [ -9.81991753e-02  -8.85505028e-02  -7.88613080e-02  -6.91325329e-02
  -5.93651264e-02  -4.95600447e-02  -3.97182508e-02  -2.98407146e-02
  -1.99284126e-02  -9.98232812e-03  -3.45104289e-06   9.98555430e-03
   1.99417667e-02   2.98641953e-02   3.97518558e-02   4.96037706e-02
   5.94189688e-02   6.91964864e-02   7.89353663e-02   8.86346584e-02
   9.82934198e-02] <matplotlib.collections.LineCollection object at 0x00000000074A9E80> Line2D(_line0)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30677241

复制
相关文章
纯手工搭建JSF开发环境(JSF2.2+maven+weblogic 12c/jboss EAP 6.1+)
JSF 2.X因为种种原因(我个人觉得主要是因为推出太晚),再加上EJB2之前的设计过于复杂,引起很多开发人员对官方解决方案的反感,即使EJB3后来做了大量改进,国内也很少有人对EJB3感兴趣,目前国内主流开发架构大多采用SSH,很少有JSF 2.x + EJB 3.x的应用,但从我个人感觉来看,特别是对于从.NET转型到JAVA的web程序员而言,JSF中的很多概念其实跟.NET很接近,国外已经有越来越多的项目在采用JSF + EJB3做为技术选型,下面将详细介绍JSF的开发环境搭建.
菩提树下的杨过
2018/09/20
1.5K0
纯手工搭建JSF开发环境(JSF2.2+maven+weblogic 12c/jboss EAP 6.1+)
18.2.3ri
1,修复关闭内存缓存下,网易的顶部图标无法显示的bug。原因是此图标是 background-image: url(products_sprites0727.svg),none;这种形式, 而svg在RawResource::preCacheSubstituteDataForMainResource里被缓存准备加载的。现在对所有主资源类型的请求都放行
龙泉寺扫地僧
2019/02/20
4590
JSF标签大全详解
藉由以下的几个主题,可以大致了解JSF的轮廓与特性,我们来看看网页设计人员与应用程序设计人员各负责什么。
一朵灼灼华
2022/08/05
1.5K0
Java 近期新闻:JDK 19 进入 Rampdown 阶段,JDK 20 专家组,Eclipse Mojarra 4.0
作者 | Michael Redlich 译者 | 刘雅梦 策划 | 丁晓昀 Java 近期新闻包括:JDK 19 进入 Rampdown 第一阶段;JDK 20 专家组成立;Spring Shell 2.1.0-M5、Open Liberty 22.0.0.6 和 22.0.0.7-beta、Quarkus 2.10.0.CR1、Apache Groovy 4.0.3、 Eclipse Mojarra 4.0、Helidon 2.5.1 的特性;以及 JNation 会议。 JDK 19 JDK 19 早
深度学习与Python
2023/03/29
7340
Java 近期新闻:JDK 19 进入 Rampdown 阶段,JDK 20 专家组,Eclipse Mojarra 4.0
在JBOSS服务器上使用Myfaces的JSF实现
JBOSS AS服务器默认使用的JSF实现是SUN的RI,要把他替换成Myfaces需要:
EltonZheng
2021/01/22
8700
JSF之经常使用注解
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/116350.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/07
5880
JSF本地联调工具实践
Tech 导读 JSF作为京东内部日常最常用的RPC组件,通过JSF扩展,为大家提供JSF扩展思路及本地联调实践。 01 背景 在项目开发中,研发同学会经历下面的过程: 图1 研发日常开发周期 但是针对团队的测试环境,涉及到几个痛点: 多人联调使用时尤其是跨部门联调时,强依赖环境稳定,频繁启停发布或者由于某些原因没有启动成功,影响的不是一个人的,而是多方的 jsf接口逻辑较多,联调环节存在隐晦的bug时,大部分做法是打点日志重启再次调用排查,如果没有发现问题,继续反复加日志重启排查。这样的过程是苦恼且费
京东技术
2022/05/12
1.5K0
JSF本地联调工具实践
map在python2和python3之间的兼容性
本文由腾讯云+社区自动同步,原文地址 http://blogtest.stackoverflow.club/map-has-no-len-in-python3/
羽翰尘
2019/11/20
9830
数据格式和兼容性
第一次尝试用思维导图和英文描述。
哒呵呵
2018/08/06
3680
数据格式和兼容性
Python升级和兼容性配置
Python里面有个现象很奇怪,一般要学习Python都会纠结是学习2和3,这个差别和纠结Java5和Java6是完全不一样的,因为Python里面的兼容性确实是个问题,在《流畅的Python》中写道:Guido(Python之父,仁慈的独裁者)在设计 Python3 的过程中,受一篇文章 “Python warts” 的影响,决定不向后兼容,否则无法修复大多数缺陷,然后Python很火,你要用Python,就得按照这个理念来。兼容性的问题到了开发者这里就是个大麻烦。 Python2
jeanron100
2018/03/22
9940
Python升级和兼容性配置
pickle在python2和python3之间的兼容性
本文由腾讯云+社区自动同步,原文地址 http://blogtest.stackoverflow.club/pickle-in-python2-python3/
羽翰尘
2019/11/21
1.4K0
Jersey 2.x 分支 Java SE 兼容性
https://www.cwiki.us/display/JERSEYZH/Java+SE+Compatibility
HoneyMoose
2019/01/30
5140
兼容性Up!Object Detection API 现已支持 TensorFlow 2
作者 | Vivek Rathod 和 Jonathan Huang,Google Research
磐创AI
2020/09/04
1.1K0
兼容性Up!Object Detection API 现已支持 TensorFlow 2
It appears the JSP version of the container is older than 2.1 and unable to locate the EL RI express
今天调试一个jboss应用的时候发现这个错误。 严重: Unable to instantiate ExpressionFactory 'com.sun.el.ExpressionFactoryImpl' 2008-9-12 11:36:47 org.apache.catalina.core.StandardContext listenerStart 严重: Exception sending context initialized event to listener instance of class
EltonZheng
2021/01/26
6490
如何使用MyFace快速构建基于JSF的应用
如果大家使用Apache MyFace的JSF实现来搭建JSF应用,可以利用Apache提供的便捷maven方法来快速搭建一个初始的应用。
EltonZheng
2021/01/22
9730
兼容性测试-云真机平台atxserver2
1、之前说过提测流程,提测需要开发工程师ShowCase,演示功能点。ShowCase的目的和ShowCase要求爬楼:Showcase通过了才算正式提测
iBigder
2023/01/09
1.8K0
兼容性测试-云真机平台atxserver2
Bom和Dom一些兼容性写法
获取样式 getComputedStyle 普通浏览器 currentStyle 兼容ie 兼容性写法 注意,这个方法在ie下如果获取没有设置的值,如设置了定位但是没有设置top值,获取top会返回auto,而其他浏览器会返回一个具体值,为了避免问题,最好给这个样式设置一个默认值 function getStyle(obj, name) { if (window.getComputedStyle) { return window.getComputedStyle(obj, nu
hss
2022/02/25
3850
Eclipse、NetBeans、IntelliJ
Eclipse作为开发Java的IDE,从出现到现在已经有几年的时间了,其丰富的特性,操作容易和在提高生产力方面收到了广大开发者的青睐。当然一提到Java IDE,人们不禁会提到其他Java IDE像NetBeans、IntelliJ等,那么这些Java IDE之间到底存在着哪些异同呢?
阳光岛主
2019/02/19
2.1K0
51.2Tbps!博通推出全新交换机芯片Tomahawk 5:带宽提升1倍,功耗降低6倍
8月18日消息,据Broadcom表示,本周其推出了速率高达51.2Tbps的Tomahawk 5 ASIC,其商用交换机芯片的数据吞吐量翻了一番。
芯智讯
2022/08/22
2.4K0
51.2Tbps!博通推出全新交换机芯片Tomahawk 5:带宽提升1倍,功耗降低6倍
最近遇到的兼容性问题和适配问题
JS: IE: 1、不能添加监听标准事件,添加polyfill initEvent: function initEvent(dom, eventName, callback) { if (!dom || !eventName || !callback) return; if (document.addEventListener) { // 一般浏览器 dom.addEventListener(eventName, callback, false);
SmileSmith
2018/04/16
1.7K0

相似问题

无法用pinia nuxt3项目运行npm运行构建

15

用码头运行nuxt3

319

npm节点反应与tauri的误差

14

Netlify npm运行构建Nuxt部署失败

14

用nuxt使用NPM包客户端

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档