设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1401|回复: 0

matlab调用python代码

[复制链接]

17

主题

117

金钱

199

积分

入门用户

发表于 2019-7-5 15:11:46 | 显示全部楼层 |阅读模式

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

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

  2.        version: '2.7'
  3.     executable: 'D:\Programs\WinPython-64bit-2.7.10.3\python-2.7.10.amd64\python.EXE'
  4.        library: 'D:\Programs\WinPython-64bit-2.7.10.3\python-2.7.10.amd64\python27.dll'
  5.           home: 'D:\Programs\WinPython-64bit-2.7.10.3\python-2.7.10.amd64'
  6.       isloaded: 1
复制代码


调用python自带函数
简单的矩阵
  1. >> ll = py.list([1, 2, 3, 4])

  2. ll =

  3.   Python list with no properties.

  4.     [1.0, 2.0, 3.0, 4.0]
复制代码


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

  2. array =

  3.   Python list with no properties.

  4.     [1.0, 2.0, 3.0, 4.0, 5.0, 6.0]
复制代码


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

  2. ans =

  3.   Python list with no properties.

  4.     [0, 1, 2, 3, 4, 5, 6]
复制代码


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

  2. res =

  3.   Python ndarray with properties:

  4.            T: [1x1 py.numpy.ndarray]
  5.         base: [1x1 py.NoneType]
  6.       ctypes: [1x1 py.numpy.core._internal._ctypes]
  7.         data: [1x200 py.buffer]
  8.        dtype: [1x1 py.numpy.dtype]
  9.        flags: [1x1 py.numpy.flagsobj]
  10.         flat: [1x1 py.numpy.flatiter]
  11.         imag: [1x1 py.numpy.ndarray]
  12.     itemsize: 8
  13.       nbytes: 200
  14.         ndim: 2
  15.         real: [1x1 py.numpy.ndarray]
  16.        shape: [1x2 py.tuple]
  17.         size: 25
  18.      strides: [1x2 py.tuple]

  19.     [[ 0.  0.  0.  0.  0.]
  20.      [ 0.  0.  0.  0.  0.]
  21.      [ 0.  0.  0.  0.  0.]
  22.      [ 0.  0.  0.  0.  0.]
  23.      [ 0.  0.  0.  0.  0.]]
复制代码



pandas返回的dataframe也是一样的

调用自定义python文件模块函数
假如有个自己写的test.py文件
  1. def sum(a, b):
  2.     return a + b
复制代码

在同文件目录下建立test.m文件,并将matlab工作目录切到当前目录
可以在m文件里面写,或者在命令行里面写
方法1:
  1. import py.test.*
  2. res = sum(5, 7)
复制代码


方法2:
  1. >> res = py.test.sum(5, 7)
复制代码


注意,
python文件被调用一次后会在matlab里面留下缓存函数,需要重启才可以清除。
python里面的对象可以赋值给matlab里面的变量,并且可以持有这个句柄调用对象函数。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

快速回复 返回顶部 返回列表