至少在我的系统(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