破旧瓷碗 发表于 2019-7-5 15:11:46

matlab调用python代码


科学计算或者写量化策略有时候需要用matlab去调用python的api,这里推荐一个简单的实现方法。
其实matlab比较新的版本中自带了一个适配组件可以直接调用python

系统函数
查看一下python的版本
>> pyversion

       version: '2.7'
    executable: 'D:\Programs\WinPython-64bit-2.7.10.3\python-2.7.10.amd64\python.EXE'
       library: 'D:\Programs\WinPython-64bit-2.7.10.3\python-2.7.10.amd64\python27.dll'
          home: 'D:\Programs\WinPython-64bit-2.7.10.3\python-2.7.10.amd64'
      isloaded: 1

调用python自带函数
简单的矩阵
>> ll = py.list()

ll =

Python list with no properties.

   

多维度数组会被matlab阉割成一维的
>> array = py.list([, ])

array =

Python list with no properties.

   

matlab默认是浮点数,需要进行转换成整数
>> py.range(int32(7))

ans =

Python list with no properties.

   

调用python第三方框架
numpy返回的矩阵直接对应matlab的矩阵
>> res = py.numpy.zeros()

res =

Python ndarray with properties:

         T:
      base:
      ctypes:
      data:
       dtype:
       flags:
      flat:
      imag:
    itemsize: 8
      nbytes: 200
      ndim: 2
      real:
       shape:
      size: 25
   strides:

    [[ 0.0.0.0.0.]
   [ 0.0.0.0.0.]
   [ 0.0.0.0.0.]
   [ 0.0.0.0.0.]
   [ 0.0.0.0.0.]]


pandas返回的dataframe也是一样的

调用自定义python文件模块函数
假如有个自己写的test.py文件
def sum(a, b):
    return a + b
在同文件目录下建立test.m文件,并将matlab工作目录切到当前目录
可以在m文件里面写,或者在命令行里面写
方法1:
import py.test.*
res = sum(5, 7)

方法2:
>> res = py.test.sum(5, 7)

注意,
python文件被调用一次后会在matlab里面留下缓存函数,需要重启才可以清除。
python里面的对象可以赋值给matlab里面的变量,并且可以持有这个句柄调用对象函数。
页: [1]
查看完整版本: matlab调用python代码