记一次python调用MATLAB函数的诡异问题
- 说明(废话)
- 解决方案
- 总结
说明(废话)
这个问题的起因是python调用MATLAB函数的问题,归根结底,主要还是因为不同语言对于不同的数据表达的方式不同造成的问题。
python调用MATLAB函数,将输入参数保存后,居然与手动输入的值运行的结果不一样,叫很多人确认过,真的完全一模一样,出来的结果却相差很远。
aa=test(10869,10000)
我用MATLAB命令行调用的结果是一个值,当这两个数通过python函数传递的时候却是另外一个值,叫小伙伴看了,值是一模一样的,这就真的诡异…
解决方案
因为变量参数的类型原因
一直以为MATLAB中只有double数据类型。输入的类型总是会将数据转为double数值类型。但是现实是我错了。为了验证我的问题,我写了两个MATLAB验证程序。
function sum = myAdd(a, b)
% sum = a + b;
% disp(sum);
ii = int64(10000)
class(ii)
ff = 10000.0
class(ff)
end
输出结果
好吧,matlab确实是有int64数据类型,而且,命令行输入的数据都默认为double类型,也就是,无论输入10还是10.0,参数都是double类型,除非显示指定为int64类型。
那么除法的结果呢?
function sum = myAdd(a, b)
% sum = a + b;
% disp(sum);
ii = int64(10099)
class(ii)
ff = 10000.0
class(ff)
aa = ii/20
class(aa)
end
在代码后面加了一个除法,除法的结果类型是?
**除法的结果,aa还是整形,也就是数据被四舍五入了。并不会默认为double型 **
总结
python代码中,定义a=100,则a的类型为int类型,如果传入matlab时未显示的指明为float,则matlab中的类型为int64,如果定义为a=100.0,则a的类型为float型,则传入MATLAB数据类型为double类型。
所以如果是单值类型的参数传入MATLAB,最好显式指定为float型。
希望对您有帮助。
编辑:myhappyandy