我正在尝试重新编写用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中的数据类型显然是 我的知识方面的差距(从防御上来说,我是一名萨克斯手!)。
我该如何解决这个问题?