python调用MATLAB函数的一个诡异的问题,数据类型问题

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

Python调用MATLAB函数有几种方法。 1. 使用MATLAB Engine API:MATLAB提供了Engine API,可以在Python中直接调用MATLAB函数。首先,确保你已经安装了MATLAB,并且已经将MATLAB引擎添加到Python的环境变量中。然后,可以使用以下代码示例调用MATLAB函数: ```python import matlab.engine # 启动MATLAB引擎 eng = matlab.engine.start_matlab() # 调用MATLAB函数 result = eng.my_matlab_function(arg1, arg2, ...) # 关闭MATLAB引擎 eng.quit() ``` 在上面的示例中,`my_matlab_function`是你想要调用MATLAB函数,`arg1`、`arg2`等是传递给函数的参数。 2. 使用MATLAB Compiler:如果你的MATLAB代码已经被编译为可执行文件或共享库,你可以使用`subprocess`模块在Python调用它。例如,如果你有一个名为`my_matlab_function.exe`的可执行文件,可以使用以下代码调用它: ```python import subprocess # 调用MATLAB可执行文件 result = subprocess.run(['my_matlab_function.exe', arg1, arg2, ...], capture_output=True, text=True) # 输出结果 print(result.stdout) ``` 在上面的示例中,`arg1`、`arg2`等是传递给MATLAB可执行文件的参数。 3. 使用MATLAB引擎for Python:MathWorks还为Python提供了MATLAB引擎for Python,它允许你在Python中直接调用MATLAB函数,类似于MATLAB Engine API。你可以通过安装`matlab`包来使用它。具体使用方法可以参考MathWorks官方文档。 无论使用哪种方法,你都需要确保已经正确安装了MATLAB,并且将其配置为可以与Python交互。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值