至少在我的系統(SciPy的0.16.0,Python的3.4.3,MATLAB r2014b,所有64位),結果是相同。但是,MATLAB和numpy以不同的方式顯示它們。 numpy默認將結果顯示爲8位小數,而MATLAB默認顯示的結果只有4位小數。但是,在內部,都有更多的精度位置(都使用雙精度浮點數,精度爲15-17小數位)。
如果我使用sprintf
將MATLAB結果顯示爲8位小數,結果與scipy結果(使用逐字符比較)相同。所以並不是說scipy在做任何錯誤的事情,甚至是任何不同的數值上,numpy對於如何顯示浮點數的默認值都不同於MATLAB。
array([ 1.07391593e+08, 1.04799110e+08, 1.02252456e+08,
9.97509288e+07, 9.72938364e+07, 9.48804965e+07,
9.25102361e+07, 9.01823919e+07, 8.78963097e+07,
8.56513445e+07, 8.34468604e+07, 8.12822305e+07,
7.91568365e+07, 7.70700690e+07, 7.50213272e+07,
7.30100186e+07, 7.10355593e+07, 6.90973734e+07,
6.71948935e+07, 6.53275598e+07, 6.34948208e+07,
6.16961327e+07, 5.99309594e+07, 5.81987724e+07,
5.64990510e+07, 5.48312815e+07, 5.31949579e+07,
5.15895811e+07, 5.00146595e+07, 4.84697083e+07,
4.69542498e+07, 4.54678129e+07, 4.40099335e+07,
4.25801542e+07, 4.11780240e+07, 3.98030987e+07,
3.84549400e+07, 3.71331165e+07, 3.58372028e+07,
3.45667795e+07])
什麼MATLAB打印默認:
那麼默認numpy的打印
filtered =
1.0e+08 *
Columns 1 through 14
1.0739 1.0480 1.0225 0.9975 0.9729 0.9488 0.9251 0.9018 0.8790 0.8565 0.8345 0.8128 0.7916 0.7707
Columns 15 through 28
0.7502 0.7301 0.7104 0.6910 0.6719 0.6533 0.6349 0.6170 0.5993 0.5820 0.5650 0.5483 0.5319 0.5159
Columns 29 through 40
0.5001 0.4847 0.4695 0.4547 0.4401 0.4258 0.4118 0.3980 0.3845 0.3713 0.3584 0.3457
什麼MATLAB打印,當我將它設置爲使用的精密8位小數sprintf('%0.8e, ',filtered)
:
1.07391593e+08, 1.04799110e+08, 1.02252456e+08, 9.97509288e+07, 9.72938364e+07, 9.48804965e+07, 9.25102361e+07, 9.01823919e+07, 8.78963097e+07, 8.56513445e+07, 8.34468604e+07, 8.12822305e+07, 7.91568365e+07, 7.70700690e+07, 7.50213272e+07, 7.30100186e+07, 7.10355593e+07, 6.90973734e+07, 6.71948935e+07, 6.53275598e+07, 6.34948208e+07, 6.16961327e+07, 5.99309594e+07, 5.81987724e+07, 5.64990510e+07, 5.48312815e+07, 5.31949579e+07, 5.15895811e+07, 5.00146595e+07, 4.84697083e+07, 4.69542498e+07, 4.54678129e+07, 4.40099335e+07, 4.25801542e+07, 4.11780240e+07, 3.98030987e+07, 3.84549400e+07, 3.71331165e+07, 3.58372028e+07, 3.45667795e+07,
scipy和MATLAB的結果設置爲相同的格式:
scipy: 1.07391593e+08 1.04799110e+08 1.02252456e+08 9.97509288e+07 9.72938364e+07 9.48804965e+07 9.25102361e+07 9.01823919e+07 8.78963097e+07 8.56513445e+07 8.34468604e+07 8.12822305e+07 7.91568365e+07 7.70700690e+07 7.50213272e+07 7.30100186e+07 7.10355593e+07 6.90973734e+07 6.71948935e+07 6.53275598e+07 6.34948208e+07 6.16961327e+07 5.99309594e+07 5.81987724e+07 5.64990510e+07 5.48312815e+07 5.31949579e+07 5.15895811e+07 5.00146595e+07 4.84697083e+07 4.69542498e+07 4.54678129e+07 4.40099335e+07 4.25801542e+07 4.11780240e+07 3.98030987e+07 3.84549400e+07 3.71331165e+07 3.58372028e+07 3.45667795e+07
MATLAB: 1.07391593e+08 1.04799110e+08 1.02252456e+08 9.97509288e+07 9.72938364e+07 9.48804965e+07 9.25102361e+07 9.01823919e+07 8.78963097e+07 8.56513445e+07 8.34468604e+07 8.12822305e+07 7.91568365e+07 7.70700690e+07 7.50213272e+07 7.30100186e+07 7.10355593e+07 6.90973734e+07 6.71948935e+07 6.53275598e+07 6.34948208e+07 6.16961327e+07 5.99309594e+07 5.81987724e+07 5.64990510e+07 5.48312815e+07 5.31949579e+07 5.15895811e+07 5.00146595e+07 4.84697083e+07 4.69542498e+07 4.54678129e+07 4.40099335e+07 4.25801542e+07 4.11780240e+07 3.98030987e+07 3.84549400e+07 3.71331165e+07 3.58372028e+07 3.45667795e+07
另外,你不需要axis
參數爲SciPy的過濾器,至少如果使用向量(1D陣列)。
感謝您確認應該在結果之間達成一致,我找到了我的錯誤。不必要的是我做了一箇中間步驟,它可以削減十進制數。但現在它完美地工作。 – kinga