• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Matlab 调用 Python 脚本

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

Matlab 调用 Python 脚本

最近尝试在 Matlab 环境中调用 Python 脚本,这里总结下碰到的几个问题。

1. Python 模块加载

在 Matlab 函数中,想要将 Python 文件作为模块加载,需要首先修改 Python 环境变量路径

P = py.sys.path;
if count(P,modpath) == 0
	insert(P,int32(0),modpath);
end

修改好路径后,直接使用 import 命令加载 Python 模块会产生错误,需采用以下命令

py.importlib.import_module(\'analytical_subcritical\'); % 加载 python 模块 analytical_subcritical

2. Python 函数调用

在调用 Python 模块中函数时,需将 Matlab 环境中变量转换为 Python 类型的变量传入函数中,部分类型变量可以直接转换,可参考 Matlab 官网—将数据传递给 Python

在 Matlab 中常用的向量和矩阵转换为 1\(\times\)N 大小可以直接作为 array.array(\'d\') 类型 Python 变量传入,因此可将输入数据大小转换后直接传入 Python 函数中进行计算。

3. Python 数据处理

在获得 Python 函数返回结果后,需将数据重新转换为 Matlab 类型变量。不同类型变量转换可以参考官网—处理从 Python 返回的数据

但是这些类型仅为 Python 中部分内建变量类型,对于常用的 Numpy 库返回的 ndarray 类型变量需要进一步转化

value = 

  Python ndarray with properties:

           T: [1×1 py.numpy.ndarray]
        base: [1×1 py.NoneType]
      ctypes: [1×1 py.numpy.core._internal._ctypes]
        data: [1×24 py.buffer]
       dtype: [1×1 py.numpy.dtype]
       flags: [1×1 py.numpy.flagsobj]
        flat: [1×1 py.numpy.flatiter]
        imag: [1×1 py.numpy.ndarray]
    itemsize: 8
      nbytes: 24
        ndim: 1
        real: [1×1 py.numpy.ndarray]
       shape: [1×1 py.tuple]
        size: 3
     strides: [1×1 py.tuple]

    [1 2 3]

对于此类型变量转换过程,目前有两种方法。

第一种方式是将 ndarray 变量转换为 Python 的 array.array 类型,随后可利用 double 函数直接转换为 Matlab 变量。

data = double(py.array.array(\'d\',py.numpy.nditer(value))); %d is for double, value is ndarray

第二种是利用 scipy 库将变量储存为 mat 文件,随后在 Matlab 中加载。

import numpy as np
import scipy.io
x = np.linspace(0, 2 * np.pi, 100)
y = np.cos(x)
scipy.io.savemat(\'test.mat\', dict(x=x, y=y))

相比第二种方法,第一种方法更为直接。转换为 Matlab 变量后利用 reshape 修改向量大小即可。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi:解决重绘造成的窗体闪烁问题发布时间:2022-07-18
下一篇:
Delphi-数组和结构体发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap