至少在我的系统上(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 有不同的默认值。
那么 numpy 默认打印什么:
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 默认打印的内容:
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
当我使用sprintf('%0.8e, ',filtered) 将 MATLAB 设置为使用 8 位精度时,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,
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
另外,scipy 过滤器不需要axis 参数,至少如果您使用向量(一维数组)。