将matlab running average转换为Python会产生意想不到的结果

将matlab running average转换为Python会产生意想不到的结果,python,matlab,moving-average,Python,Matlab,Moving Average,我在Matlab中有一段代码,用于计算运行平均值: as = movmean(std_new1,PTA); 在matlab中计算时,如下所示: as = [NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.0311573, 0.03135, 0.0315315, 0.0317018, 0.0318609, 0.0320087, 0.0321454, 0.0322708, 0.0323851

我在Matlab中有一段代码,用于计算运行平均值:

as = movmean(std_new1,PTA);
在matlab中计算时,如下所示:

as = [NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.0311573, 0.03135, 0.0315315, 0.0317018, 0.0318609, 0.0320087, 0.0321454, 0.0322708, 0.0323851, 0.0324881, 0.0325799, 0.0326605, 0.0329592, 0.0334758, 0.0342104, 0.0351631, 0.0363338, 0.0377224, 0.0393291, 0.0411538, 0.0431965, 0.0454572, 0.0473395, 0.0488433, 0.0499687, 0.0507156, 0.051084, 0.051074, 0.0506856, 0.0499187, 0.0487733, 0.0472495, 0.0456993, 0.0441228, 0.0425198, 0.0408905, 0.0392348, 0.0375527, 0.0358443, 0.0341094, 0.0323482, 0.0305606, 0.0290992, 0.0279639, 0.0271548, 0.0266719, 0.0265151, 0.0266844, 0.02718, 0.0280016, 0.0291495, 0.0306235, 0.0319449, 0.0331137, 0.03413, 0.0349937, 0.0357048, 0.0362634, 0.0366693, 0.0369227, 0.0370235, 0.0369717, 0.0369048, 0.0368227, 0.0367255, 0.0366131, 0.0364856, 0.036343, 0.0361852, 0.0360122, 0.0358241, 0.0356209, 0.03539, 0.0351316, 0.0348455, 0.0345318, 0.0341905, 0.0338216, 0.0334251, 0.033001, 0.0325493, 0.0320699, 0.0315601, 0.0310198, 0.030449, 0.0298477, 0.029216, 0.0285537, 0.027861, 0.0271378, 0.0263841, 0.0255999, 0.0248585, 0.02416, 0.0235044, 0.0228916, 0.0223217, 0.0217946, 0.0213104, 0.020869, 0.0204704, 0.0201148, 0.0198367, 0.0196361, 0.0195132, 0.0194679, 0.0195001, 0.0196099, 0.0197973, 0.0200623, 0.0204049, 0.0208251, 0.0211917, 0.0215047, 0.0217641, 0.02197, 0.0221224, 0.0222211, 0.022429, 0.0226666, 0.0229393, 0.0232537, 0.0235459, 0.0238112, 0.0240434, 0.0242341, 0.0243722]
我需要在Python中执行相同的操作。我基本上尝试了这里提出的每一个解决方案,但问题是没有一个能在我的数据上给出正确的结果

这是
std\u new1

std_new1 = np.array([np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 0.0223287, 0.023921, 0.0255133, 0.0271056, 0.0286979, 0.0302902, 0.0318825, 0.0334747, 0.035067, 0.0366593, 0.0382516, 0.0370447, 0.0358378, 0.0346309, 0.0334241, 0.0322172, 0.0310103, 0.0298034, 0.0285965, 0.0273896, 0.0261827, 0.0275508, 0.028919, 0.0302871, 0.0316552, 0.0330233, 0.0343914, 0.0357595, 0.0371276, 0.0384957, 0.0398638, 0.0430172, 0.0461705, 0.0493238, 0.0524771, 0.0556305, 0.0587838, 0.0619371, 0.0650904, 0.0682438, 0.0713971, 0.0651962, 0.0589952, 0.0527943, 0.0465933, 0.0403924, 0.0341914, 0.0279905, 0.0217896, 0.0155886, 0.00938767, 0.0120134, 0.0146392, 0.017265, 0.0198907, 0.0225165, 0.0251422, 0.027768, 0.0303938, 0.0330195, 0.0356453, 0.0359675, 0.0362898, 0.036612, 0.0369342, 0.0372565, 0.0375787, 0.037901, 0.0382232, 0.0385454, 0.0388677, 0.0384419, 0.0380161, 0.0375903, 0.0371645, 0.0367387, 0.0363129, 0.0358871, 0.0354613, 0.0350355, 0.0346097, 0.034629, 0.0346483, 0.0346676, 0.034687, 0.0347063, 0.0347256, 0.034745, 0.0347643, 0.0347836, 0.034803, 0.033825, 0.032847, 0.0318689, 0.0308909, 0.0299129, 0.0289349, 0.0279569, 0.0269789, 0.0260009, 0.0250229, 0.0244325, 0.0238421, 0.0232518, 0.0226614, 0.022071, 0.0214806, 0.0208903, 0.0202999, 0.0197095, 0.0191191, 0.0189982, 0.0188772, 0.0187562, 0.0186352, 0.0185142, 0.0183932, 0.0182722, 0.0181512, 0.0180302, 0.0179092, 0.0188705, 0.0198318, 0.0207932, 0.0217545, 0.0227158, 0.0236771, 0.0246384, 0.0255997, 0.026561, 0.0275224, 0.02633, 0.0251377, 0.0239454, 0.022753, 0.0215607, 0.0203684])
这是
PTA
(1x1矩阵)

比如下面的一个,

AS = [np.mean(std_new1[x:x + PTA[0]]) for x in range(len(std_new1) - PTA[0] + 1)]
给出了几乎相同的结果,但开头的NA值较少,结尾缺少数值

这是用Python计算的:

[       nan        nan        nan        nan        nan        nan
        nan        nan        nan 0.03115731 0.03135002 0.03153151
 0.03170179 0.03186087 0.03200873 0.03214538 0.03227083 0.03238507
 0.0324881  0.03257992 0.03266053 0.03295915 0.03347579 0.03421044
 0.03516309 0.03633375 0.03772243 0.03932911 0.04115381 0.04319652
 0.04545724 0.04733951 0.04884332 0.04996868 0.05071558 0.05108404
 0.05107404 0.05068559 0.04991868 0.04877333 0.04724952 0.04569933
 0.04412277 0.04251983 0.04089051 0.03923481 0.03755273 0.03584427
 0.03410944 0.03234823 0.03056064 0.0290992  0.02796393 0.02715482
 0.02667186 0.02651507 0.02668443 0.02717996 0.02800164 0.02914948
 0.03062348 0.0319449  0.03311375 0.03413001 0.0349937  0.03570481
 0.03626335 0.0366693  0.03692268 0.03702348 0.0369717  0.03690477
 0.0368227  0.03672548 0.03661312 0.03648561 0.03634296 0.03618516
 0.03601221 0.03582412 0.03562089 0.03539004 0.03513158 0.03484552
 0.03453184 0.03419055 0.03382164 0.03342514 0.03300102 0.03254929
 0.03206995 0.03156012 0.03101981 0.03044902 0.02984774 0.02921597
 0.02855372 0.02786099 0.02713777 0.02638407 0.02559987 0.02485853
 0.02416004 0.02350441 0.02289162 0.02232169 0.0217946  0.02131037
 0.02086898 0.02047045 0.02011476 0.01983666 0.01963615 0.01951322
 0.01946787 0.01950011 0.01960994 0.01979734 0.02006233 0.02040491
 0.02082507 0.02119166 0.02150469 0.02176414 0.02197004 0.02212236
 0.02222112]

这很可能与以下内容有关,请参见:“
‘收缩’
:收缩输入端点附近的窗口大小,以仅包含现有元素。”换句话说,您需要在向量的边缘适当收缩窗口大小。还要注意的是,您没有将
nanflag
传递给MATLAB,因此任何出现
nan
值的窗口(在您的案例中,前28个点)都将是nan。对于这个问题,与前面的问题一样,请仔细阅读MATLAB文档。很多默认情况都发生在幕后。那么你是说问题在于如何在Matlab代码中使用movmean?这意味着我的Python代码是正确的?什么是“正确的”,只有您才能确定。我想说的是,MATLAB内置函数有很多可以设置的选项,每一个都有默认值(检查每个函数的文档)。然后天真地用Python实现某些东西,并期望它也这样做,显然是行不通的。因此,我的意见是:请阅读您翻译的每个函数的MATLAB文档,并确保翻译所有所需的功能和默认值。老实说:我从不翻译代码,而是从头开始,以避免他的麻烦。对不起,我不是有意粗鲁。我的意思是:因为您是使用应用程序的人,所以您是决定如何处理nan值以及是否“缩小”阵列边缘的窗口大小的人。任何一种方法都可能是正确的,这取决于应用程序。鉴于您声称MATLAB代码为您工作,我认为您认为这是正确的,因此需要复制MATLAB所做的端点收缩和nan处理。是的,我们假设显示的MATLAB代码及其结果是正确的。有鉴于此,我想准确地再现它使用Python所做的事情。然而,我似乎无法用它重现相同的值,不管到目前为止我已经尝试了多少个moving means的实现。我想正如你所说的,Matlab的方式(即使它的代码只显示两个向量作为参数)比看起来复杂得多。Python中一定有一些隐藏的默认参数,我没有这些参数,因此结果不同。这很可能与以下内容有关,请参见:“
'shrink'
:缩小输入端点附近的窗口大小,以仅包括现有元素。”换句话说:您需要在向量的边缘适当地缩小窗口大小。还要注意的是,您没有将
nanflag
传递给MATLAB,因此任何出现
nan
值的窗口(在您的案例中,前28个点)都将是nan。对于这个问题,与前面的问题一样,请仔细阅读MATLAB文档。很多默认情况都发生在幕后。那么你是说问题在于如何在Matlab代码中使用movmean?这意味着我的Python代码是正确的?什么是“正确的”,只有您才能确定。我想说的是,MATLAB内置函数有很多可以设置的选项,每一个都有默认值(检查每个函数的文档)。然后天真地用Python实现某些东西,并期望它也这样做,显然是行不通的。因此,我的意见是:请阅读您翻译的每个函数的MATLAB文档,并确保翻译所有所需的功能和默认值。老实说:我从不翻译代码,而是从头开始,以避免他的麻烦。对不起,我不是有意粗鲁。我的意思是:因为您是使用应用程序的人,所以您是决定如何处理nan值以及是否“缩小”阵列边缘的窗口大小的人。任何一种方法都可能是正确的,这取决于应用程序。鉴于您声称MATLAB代码为您工作,我认为您认为这是正确的,因此需要复制MATLAB所做的端点收缩和nan处理。是的,我们假设显示的MATLAB代码及其结果是正确的。有鉴于此,我想准确地再现它使用Python所做的事情。然而,我似乎无法用它重现相同的值,不管到目前为止我已经尝试了多少个moving means的实现。我想正如你所说的,Matlab的方式(即使它的代码只显示两个向量作为参数)比看起来复杂得多。必须有一些隐藏的默认参数,这是我在Python中缺少的,因此结果不同。
[       nan        nan        nan        nan        nan        nan
        nan        nan        nan 0.03115731 0.03135002 0.03153151
 0.03170179 0.03186087 0.03200873 0.03214538 0.03227083 0.03238507
 0.0324881  0.03257992 0.03266053 0.03295915 0.03347579 0.03421044
 0.03516309 0.03633375 0.03772243 0.03932911 0.04115381 0.04319652
 0.04545724 0.04733951 0.04884332 0.04996868 0.05071558 0.05108404
 0.05107404 0.05068559 0.04991868 0.04877333 0.04724952 0.04569933
 0.04412277 0.04251983 0.04089051 0.03923481 0.03755273 0.03584427
 0.03410944 0.03234823 0.03056064 0.0290992  0.02796393 0.02715482
 0.02667186 0.02651507 0.02668443 0.02717996 0.02800164 0.02914948
 0.03062348 0.0319449  0.03311375 0.03413001 0.0349937  0.03570481
 0.03626335 0.0366693  0.03692268 0.03702348 0.0369717  0.03690477
 0.0368227  0.03672548 0.03661312 0.03648561 0.03634296 0.03618516
 0.03601221 0.03582412 0.03562089 0.03539004 0.03513158 0.03484552
 0.03453184 0.03419055 0.03382164 0.03342514 0.03300102 0.03254929
 0.03206995 0.03156012 0.03101981 0.03044902 0.02984774 0.02921597
 0.02855372 0.02786099 0.02713777 0.02638407 0.02559987 0.02485853
 0.02416004 0.02350441 0.02289162 0.02232169 0.0217946  0.02131037
 0.02086898 0.02047045 0.02011476 0.01983666 0.01963615 0.01951322
 0.01946787 0.01950011 0.01960994 0.01979734 0.02006233 0.02040491
 0.02082507 0.02119166 0.02150469 0.02176414 0.02197004 0.02212236
 0.02222112]