等同于Numpy中MATLAB的diff函数,获得意外结果

时间:2019-07-13 18:28:18

标签: python pandas matlab numpy

我正在尝试重新编写用Python编写的MATLAB函数

当使用np.diff(array)或np.ediff1d(array)计算Numpy中dtype float64数组中的连续元素之间的差时,我得到的结果对我来说毫无意义(eg1是输出)。当我将数组转换为Pandas系列并使用pd.Series.diff()时,会得到正确的结果(eg2),但是我不习惯使用Pandas,而是希望在Numpy中获得所需的结果。智慧地说,我很想知道为什么Numpy的行为像这样大声笑。

 mididiff = np.diff(midi)

 mididiff = np.ediff1d(midi) 

两者都导致输出1(在下面进一步介绍),这对我来说没有意义

如果我将midi转换为熊猫系列:

midi = pd.Series(midi)

然后计算差异:

mididiff = midi.diff()

结果为output2(在下方)

output1:

diff
array([ 0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
        0.00000000e+00,  6.97604821e+01,  4.23796132e-01,  2.64797469e-02,
        1.30111704e-02,  3.69745669e-02,  4.19431796e-02,  1.30448709e-02,
       -1.72452049e-04,  1.26183770e-02,  3.21393846e-03, -7.44549242e-03,
       -7.03518633e-03, -3.50274566e-03, -1.40289148e-02, -1.60362681e-02,...
        1.74323138e-02,  3.03912899e-02,  1.10621339e-02,  2.01706584e-02,
        1.25640437e-02,  1.51559658e-02,  1.41538434e-02,  9.03407863e-03])

output2:

0            NaN
1       0.000000
2       0.000000
3       0.000000
4       0.000000
5       0.000000
6       0.000000
7       0.000000
8       0.000000
9       0.000000
10     69.760482
11      0.423796
12      0.026480
13      0.013011

         ...    
787     0.011062
788     0.020171
789     0.012564
790     0.015156
791     0.014154
792     0.009034

output2是预期的数据,但是我还没有处理过熊猫 并在numpy数组中获得这些结果会真正移动 事情进展。我知道output1中的数据类型显然是 我的知识方面的差距(从防御上来说,我是一名萨克斯手!)。

我该如何解决这个问题?

0 个答案:

没有答案