本来只是想获取字符串的MD5hash值,结果发现麻烦。首先去mathworks找到的DataHash,GetMD5这些函数要么无法使用,要么就是计算出来的md5值是错误的,反正达不到效果。
刚开始以为mathworks的代码必须登录账户才能下载,现在才发现,点击Overview旁边的选项卡就能看到源代码。 😂
matlab调用python库函数和自定义脚本函数-LMLPHP
当初就算是找到了一些函数也是不能使用,最后还是使用python库来解决。好在matlab对python的调用非常简单。直接使用库就好了,唯一的问题就是有些python的语法和matlab不同,比如切片操作这些。

安装python3环境

2019-08-19测试发现macos中3.7版本可以,但是在centOS中就调用失败。所以就centOS中测试安装3.5的版本了。
后面发现应该是编译时的enable-shared参数问题。

2020-02-18centos中测试可以直接用conda来安装python3.5使用,3.6,3.7测试调用失败!

开始手动编译安装

cd ~
yum install zlib-devel bzip2-devel openssl-devel ncurese-devel
wget https://www.python.org/ftp/python/3.5.0/Python-3.5.0.tgz
tar xf  Python-3.5.0.tgz
cd Python-3.5.0
./configure --enable-shared #matlab要求必须设置enable-shared参数
make &&  make install

参考:
https://ww2.mathworks.cn/help/matlab/matlab_external/undefined-variable-py-or-function-py-command.html#buialof-67
https://ww2.mathworks.cn/help/matlab/getting-started-with-python.html?lang=en

切换默认的python解释器

pyversion`可以查看python解释器路径,如果需要修改:

 pyversion /usr/local/bin/python3 %切换到python3.7指定路径

直接调用python内置函数

计算字符串md5函数

使用python的hashlib库进行操作

function[re]=md5(str)
    %{
        依赖python进行md5 hash
    %}
    m2 = py.hashlib.md5();
    m2.update(py.str(str).encode('utf-8'));
    re = char(m2.hexdigest());

说明:
此函数依赖python环境,确保系统中有安装。
兼容Linux,Mac,Windows

最后char函数是将类型转换为matlab的str
知道了这个操作,以后很多操作就会非常简单。
比如

获取当前时间戳:

str2num(char(py.int(py.time.time())))

直接用库来调用即可,最后再使用matlab函数str2num,char处理成number类型。

调用自定义.py脚本函数

上面的方法倒是可以解决一部分难题,但是遇到方括号[]、百分号%操作符这些直接在文件中就不会执行了。毕竟matlab是以它的语法来解析,这样只得起调文件来操作。

新建文件位于当前工作目录

def func():
    return '123'[::-1]

载入python脚本:


%脚本所在路径,空字符串表示当前目录 path = '' %当前目录 %path = 'a/' %当前的子目录a if count(py.sys.path,path) == 0 insert(py.sys.path,int32(0),path); end %清除脚本缓存,执行重载操作 clear classes; mod = py.importlib.import_module('test');%载入的脚本模块 %mod = py.importlib.import_module('a.test');%载入的子目录下的脚本模块 py.importlib.reload(mod);

调用即可得到切片结果,注意为类型。
子目录形同:py.子目录.文件名.函数名

当修改py文件之后再调用会发现还是之前的结果,matlab缓存了之前的python脚本,所以这里需要这类操作。

参考:
MATLAB 调用 Python

https://www.cnblogs.com/zknublx/p/6212590.html

https://blog.csdn.net/jnulzl/article/details/51170859

https://zhuanlan.zhihu.com/p/42598340

https://blog.csdn.net/x5675602/article/details/52134981

http://www.1cae.com/a/MatLab/52/python-matlab-8943.htm

03-04 15:03