记一次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

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部