首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用numpy计算向量的自相关

用numpy计算向量的自相关
EN

Stack Overflow用户
提问于 2018-02-17 10:01:59
回答 3查看 3.2K关注 0票数 0

我正在努力想出一种非混淆的,高效的方法,用numpy来计算一组3D向量中的自相关函数。

我在三维空间中有一组向量,保存在一个数组中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
a = array([[ 0.24463039,  0.58350592,  0.77438803],
       [ 0.30475903,  0.73007075,  0.61165238],
       [ 0.17605543,  0.70955876,  0.68229821],
       [ 0.32425896,  0.57572195,  0.7506    ],
       [ 0.24341381,  0.50183697,  0.83000565],
       [ 0.38364726,  0.62338687,  0.68132488]])

它们的自相关函数定义为

如果上面的图像不可用,公式也打印在下面: C(t,{v}n) = \frac 1{n-t}\sum{i=0}^{n-1-t}\vec v_i\cdot\vec v_{i+t}

我正努力用一种有效的、非混淆的方式对此进行编码。我可以用两个嵌套的for循环来解释这一点,但这很慢。通过使用numpy中的嵌入式函数之一,有一种快速的方法,但它们似乎使用的是完全不同的相关函数定义。这里已经解决了一个类似的问题,如何使用numpy.correlate进行自相关?,但它不能处理向量。你知道我该怎么解决这个问题吗?

EN

回答 3

Stack Overflow用户

发布于 2018-02-17 13:27:42

NumPy例程用于一维数组。作为“最小”的改进,对规范化步骤使用向量化操作(在最后一行中使用np.arange ):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def vector_autocorrelate(t_array):
  n_vectors = len(t_array)
  # correlate each component indipendently
  acorr = np.array([np.correlate(t_array[:,i],t_array[:,i],'full') for i in xrange(3)])[:,n_vectors-1:]
  # sum the correlations for each component
  acorr = np.sum(acorr, axis = 0)
  # divide by the number of values actually measured and return
  acorr /= (n_vectors - np.arange(n_vectors))
  return acorr

对于较大的数组大小,应考虑使用傅里叶变换算法进行相关。如果您对此感兴趣,请查看库滴定动力学的示例(免责声明:我编写了库,它只依赖于NumPy)。

作为参考,这里列出了NumPy代码(我为测试编写的)、代码vector_autocorrelate和时间动态的时间。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
size = [2**i for i in range(4, 17, 2)]

np_time = []
ti_time = []
va_time = []
for s in size:
    data = np.random.random(size=(s, 3))
    t0 = time.time()
    correlate = np.array([np.correlate(data[:,i], data[:,i], mode='full') for i in range(data.shape[1])])[:,:s]
    correlate = np.sum(correlate, axis=0)/(s-np.arange(s))
    np_time.append(time.time()-t0)
    t0 = time.time()
    correlate = tidynamics.acf(data)
    ti_time.append(time.time()-t0)
    t0 = time.time()
    correlate = vector_autocorrelate(data)
    va_time.append(time.time()-t0)

您可以看到结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print("size", size)
print("np_time", np_time)
print("va_time", va_time)
print("ti_time", ti_time)

尺寸16,64,256,1024,4096,16384,65536 np_time 0.00023794174194335938,0.0002703666687011719,0.0002713203430175781,0.001544952392578125,0.0278470516204834,0.36094141006469727,6.922360420227051 va_time 0.00021696090698242188,0.0001690387725830078,0.000339508056640625,0.0014629364013671875,0.024930953979492188,0.34442687034606934,7.005630731582642 ti_time 0.0011148452758789062,0.0008449554443359375,0.0007512569427490234,0.0010488033294677734,0.0026645660400390625,0.007939338684082031,0.048232316970825195

或者策划他们

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
plt.plot(size, np_time)
plt.plot(size, va_time)
plt.plot(size, ti_time)
plt.loglog()

对于非常小的数据序列,"N**2“算法是不可用的。

票数 2
EN

Stack Overflow用户

发布于 2020-05-06 10:27:04

嗨,我遇到了一个伊米拉问题。这是我的主意

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def fast_vector_correlation(M):
    n_row = M.shape[0]
    dot_mat = M.dot(M.T)
    corr = [np.trace(dot_mat,offset=x) for x in range(n_row)]
    corr/=(n_row-np.arange(n_row))
    return corr

其思想是dot_mat包含行向量之间的所有标量积。要计算不同t值下的相关性,只需将对角线之和(右上角部分),如图片中所示。

票数 1
EN

Stack Overflow用户

发布于 2018-02-17 10:01:59

我在这里发布答案,以防其他人需要它,因为我花了相当长的时间才找到一个可行的方法。我最终通过定义以下函数来解决这个问题

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def vector_autocorrelate(t_array):
  n_vectors = len(t_array)
  # correlate each component indipendently
  acorr = np.array([np.correlate(t_array[:,i],t_array[:,i],'full') for i in xrange(3)])[:,n_vectors-1:]
  # sum the correlations for each component
  acorr = np.sum(acorr, axis = 0)
  # divide by the number of values actually measured and return
  acorr = np.array( [ val / (n_vectors - i) for i,val in enumerate(acorr)])
  return acorr

如果有人有一个更好的主意,我真的很想听到,因为我认为目前的一个仍然没有那么紧凑,它应该是。这总比没有好,这就是为什么我要在这里张贴它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48844295

复制
相关文章
MATLAB-向量相关计算
可以参照的向量元素的几种方式中的一种或多种。ith 一个矢量v的分量被称为v(i)。
用户9925864
2022/07/27
7320
Python:用Numpy来实现向量的各种运算
参考链接: Python Numpy 首先要写上这一句:  from numpy import *  (写上这句的前提也得你已经安了numpy)  (1) 定义一个零向量(4维):  >>>a=zeros(4)  >>>a  array([0.,0.,0.,0.])  定义一个List:  b=[1,2,3,4]  (2)向量可直接与List相加:  >>>c=a+b  >>>c  array([1.,2.,3.,4.])   (3)要给向量里每个元素都乘以同一个数:  >>>d=b*[3]  或者:  >
用户7886150
2020/12/25
1K0
numpy求特征向量_python计算矩阵
可知矩阵A:特征值为1对应的特征向量为 [ -1,-2,1]T。特征值为2对应的特征向量为 [ 0,0,1]T 我们可以进一步对特征向量进行单位化,单位化之后的结果如下:
全栈程序员站长
2022/11/01
1K0
numpy求特征向量_python计算矩阵
numpy的相关使用
numpy是一个N维数组,类型是numpy.ndarray,ndarray中所有的元素类型必须一样,每个素组中都有一个shape(各维度大小的元组)和一个dtype(数组数据类型的对象)
用户8346838
2021/03/10
6310
向量自回归简介
本文探讨了如何使用向量自回归模型(VAR)进行时间序列预测,并提出了基于矩阵分解和并行计算的优化方法。首先,介绍了VAR模型的基本原理和常见应用。然后,详细阐述了如何利用基于优化的方法来找到最佳参数,并使用QR分解来加速计算。最后,探讨了如何进一步改进VAR模型以增强其性能和灵活性。
花落花飞去
2017/12/20
3.4K0
向量自回归简介
numpy中关于向量的坑
numpy中的标量或者向量涉及到矩阵计算时,会遇到以下的坑: a = np.arange(6) print("a = np.arange(6) out:\n", a) # [ 0 1 2 3 4 5] print("a.shape is", a.shape) # (6,) print("a.dim is", a.ndim) # 1 aT = a.T print("aT = a.T out:\n", aT) # [ 0 1 2 3 4 5] print("aT.shape is",
雷科
2020/02/23
7520
向量空间相关概念总结-向量
最近发现现在深入去写具体某个概念的时候会用到别的好多概念,就会出现由于别的概念不清楚而新概念整不明白的现象。所以我觉得应该先整理一下都有哪些概念,有个大概的了解之后再去细化的去研究具体某个概念吧。 向量 物理含义:有方向的线段 数学含义:有序数组 代数表示:由于向量是从起点指向终点,这里始终遵循起点为原点O,这样,向量就可以由终点的坐标来表示。比如,二维向量就是(x,y),三维就是(x,y,z),四五六七八维或更多维同理,只是超过三维的就没有几何意义了,或者可以说生活中基本就见不到可以类比的事物了
坑吭吭
2018/10/10
9770
向量空间相关概念总结-向量
Python科学计算:用NumPy快速处理数据
创建数组 import numpy as np a=np.array([1,2,3]) b=np.array([[1,2,3],[4,5,6],[7,8,9]]) b[1,1]=10 print(a.shape) print(b.shape) print(a.dtype) print(b) 结构数组 import numpy as np persontype=np.dtype({ "names":["name","age","chinese","math","english"], "fo
hankleo
2020/09/17
5880
Python科学计算:用NumPy快速处理数据
它不仅是Python中使用最多的第三方库,而且还是SciPy、Pandas等数据科学的基础库。它所提供的数据结构比Python自身的“更高级、更高效”,可以这么说,NumPy所提供的数据结构是Python数据分析的基础。
慕白
2020/01/02
1.2K0
Python科学计算:用NumPy快速处理数据
向量空间相关概念总结-向量空间
什么是向量空间 特点: ① 包含向量 比如向量组,而且向量组内部的向量维数相同 ② 包含向量的运动 向量的加法->生成新的向量 向量的数乘->向量伸缩 ③ 向量的运动依然在空间中 向量相
坑吭吭
2018/10/10
1.9K0
向量空间相关概念总结-向量空间
[1164]python用numpy计算均值,方差,标准差
除了np.mean函数,还有np.average函数也可以用来计算mean,不一样的地方时,np.average函数可以带一个weights参数:
周小董
2022/10/24
3.7K0
怎么把numpy向量[1,1,0]变成[(0,1),(1,1),(2,0)]?
前几天在Python最强王者交流群【麦当】问了一道numpy处理的问题,如下图所示。
前端皮皮
2022/08/17
8070
怎么把numpy向量[1,1,0]变成[(0,1),(1,1),(2,0)]?
R计算多个向量两两之间相关性
我们知道R里面计算两个数值向量之间的相关性用cor函数,而检验是否显著相关用cor.test。例如
生信交流平台
2022/09/21
7050
R计算多个向量两两之间相关性
Python使用numpy计算矩阵特征值、特征向量与逆矩阵
Python扩展库numpy.linalg的eig()函数可以用来计算矩阵的特征值与特征向量,而numpy.linalg.inv()函数用来计算可逆矩阵的逆矩阵。 >>> import numpy as np >>> x = np.matrix([[1,2,3], [4,5,6], [7,8,9]]) # 计算矩阵特征值与特征向量 >>> e, v = np.linalg.eig(x) # 根据特征值和特征向量得到原矩阵 >>> y = v * np.diag(e) * np.linalg.inv(v) >
Python小屋屋主
2018/04/16
10.1K0
Python+numpy实现函数向量化
Python本身对向量操作的支持并不是很好,需要借助列表推导式或函数式编程来实现,例如: >>> import random # 生成随机测试数据 >>> x = random.sample(range(1000), 5) >>> y = random.sample(range(1000), 5) # 列表推导式,模拟向量减法 >>> [vecX-vecY for vecX, vecY in zip(x,y)] [-171, -370, -66, 282, 231] # 列表推导式,模拟向量减法 >>>
Python小屋屋主
2018/04/16
3.1K0
基于典型相关分析的词向量
本文为 seaboat 为 AI 研习社撰写的独家稿件,得到了其指点和审核,AI 研习社在此表示感谢。 在NLP领域中,为了能表示人类的语言符号,一般会把这些符号转成一种数学向量形式以方便处理,我们把语言单词嵌入到向量空间中就叫词嵌入(word embedding)。 比如有比较流行的谷歌开源的 word2vec ,它能生成词向量,通过该词向量在一定程度上还可以用来度量词与词之间的相似性。word2vec采用的模型包含了连续词袋模型(CBOW)和Skip-Gram模型,并通过神经网络来训练。 但这篇文章不
AI研习社
2018/03/16
1K0
基于典型相关分析的词向量
Python中NumPy库的相关操作
NumPy(Numerical Python)是Python中常用的数值计算库,它提供了高性能的多维数组对象和对数组进行操作的函数。
周小末天天开心
2023/10/16
2160
向量自回归模型(VAR)「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/167150.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/21
4630
向量自回归模型(VAR)「建议收藏」
numpy中数组操作的相关函数
在numpy中,有一系列对数组进行操作的函数,在使用这些函数之前,必须先了解以下两个基本概念
生信修炼手册
2020/06/17
2.1K0
点击加载更多

相似问题

用NumPy计算向量中的值

14

用Numpy计算相关系数

12

用numpy einsum计算矩阵列向量的内积

24

numpy中向量的自相关

119

用因子标号计算向量的相关性

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文