Hello 大家好,我是一名新来的金融领域打工人,日常分享一些python知识,都是自己在学习生活中遇到的一些问题,分享给大家,希望对大家有一定的帮助!
最近呀,我在进行金融数据分析的时候会用到一阶差分也就是np.diff() ,但是我相信有许多小伙伴和我一样会遇到这样的问题:
首先,让我们构建一个array数组:
import numpy as np a = np.array([2,3,4,6,8,9])
我们打印一下,便得到这样的结果:
这时我们对a进行一阶差分的计算,代码如下:
np.diff(a)
我们打印一下结果:
array([1, 1, 2, 2, 1])
这时候我们发现新产生的array数组只有5个数,然而我们原来的数组有6个数,在我平时做金融数据分析的时候需要确保差分之后的数组长度和以前的数组长度保持一致,所以这个问题怎么解决呢?
其实呀我们只需要在np.diff()的时候增加一个新的参数:prepend,直接上代码:
np.diff(a,prepend=0) ## 打印结果 array([2, 1, 1, 2, 2, 1])
这样的数组是不是就有6个数啦!其实我们可以看出来,数组的第一个数2其实是原数组第一个数、2-0得到的(0就是prepend传入的参数),当然我们也可以试试其他参数:
np.diff(a,prepend=2) ## 打印结果 array([0, 1, 1, 2, 2, 1]) np.diff(a,prepend=3) ## 打印结果 array([-1, 1, 1, 2, 2, 1])
除了我们可以直接自己指定传入的数值大小,我们还可以通过索引、切片的方式来做,其中a[0]=2,a[1]=3:
np.diff(a,prepend=a[0]) ## 打印结果 array([0, 1, 1, 2, 2, 1]) np.diff(a,prepend=a[1]) ## 打印结果 array([-1, 1, 1, 2, 2, 1])
还有更特殊的切片的方法,代码如下:
np.diff(a,prepend=a[0:1]) ## 打印结果 array([0, 1, 1, 2, 2, 1])
其中a[0:1] = array([2]),也就是说这种方法其实是先把array([2])排到数组的最开头,然后再做的差分,所以差分后第一项=2-2=0,差分后数组长度保持为6。
还有其他情况:
np.diff(a,prepend=a[0:2]) ## 打印结果 array([ 1, -1, 1, 1, 2, 2, 1])
咦,这怎么差分了数组长度还变多了,变成7个了?
首先我们要知道a[0:2] = array([2,3]),其实这个情况和上面一样,这种方法其实是先把array([2,3])排到差分前数组的最开头,然后再做的差分,也就是下面的情况:
a = np.array([2,3,4,6,8,9]) ## 数组b是将array([2,3])排到数组a的开头后,形成的新的数组 b = np.array([2,3,2,3,4,6,8,9]) np.diff(b) ## 打印结果 array([ 1, -1, 1, 1, 2, 2, 1])
结果是不是一样呀, 大家可以这样考虑:prepend接受的参数其实在数组a进行差分前,需要排到数组a的开头去,形成新的数组后,才进行差分运算!
今天的文章就分享到这里啦!



