python是纯粹的自由软件, 源代码和解释器cpython遵循 gpl(gnu general public license)协议。python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进。
python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是c/c++)很轻松地联结在一起。常见的一种应用情形是,使用python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3d游戏中的图形渲染模块,性能要求特别高,就可以用c/c++重写,而后封装为python可以调用的扩展类库。需要注意的是在您使用扩展类库时可能需要考虑平台问题,某些可能不提供跨平台的实现。
matlab调用python的脚本文件
matlab把所有参数输出到一个文件里,然后用system命令调python脚本。python脚本读文件做计算结果再写文件。最后matlab再读文件得到结果。假设python脚本的用法是:
python xxx.py in.txt out.txt
则matlab调用的命令:
[status, cmdout] = system(‘python xxx.py in.txt out.txt’)
matlab的system函数用来向操作系统发送一条指令,并得到控制台的输出,可以直接将控制台的输出在command window打印出来,或者保存在变量中。 与system类似的还有dos函数和unix函数,我觉得它们都是对system函数的一种包装,而matlab的system函数也许是对c的库函数system的包装。
先编写一个调用python脚本的matlab程序即python.m
function [result status] = python(varargin)
% call python
%命令字符串
cmdstring=‘python’;
for i = 1:nargin
thisarg = varargin{i};
if isempty(thisarg) | ~ischar(thisarg)
error([‘all input arguments must be valid strings.’]);
elseif exist(thisarg)==2
%这是一个在matlab路径中的可用的文件
if isempty(dir(thisarg))
%得到完整路径
thisarg = which(thisarg);
end
elseif i==1
% 第一个参数是python文件 - 必须是一个可用的文件
error([‘unable to find python file: ’, thisarg]);
end
% 如果thisarg中有空格,就用双引号把它括起来
if any(thisarg == ‘ ’)
thisarg = [‘“’, thisarg, ‘”’];
end
% 将thisarg加在cmdstring后面
cmdstring = [cmdstring, ‘ ’, thisarg]
end
%发送命令
[status,result]=system(cmdstring);
end
就可以用这个函数调用python脚本了。 下面就来个调用python脚本matlab_readlines.py(保存在matlab当前目录)的例子
import sys
def readlines(fname):
try:
f=open(fname,‘r’)
li=f.read().splitlines()
cell=‘{’+repr(li)[1:-1]+‘}’
f.close()
print cell
except ioerror:
print “can‘t open file ”+fname
if ’__main__‘==__name__:
if len(sys.argv)《2:
print ’no file specified.‘
sys.exit()
else:
readlines(sys.argv[1])
这个脚本用来读取一个文本文件,并生成matlab风格的cell数组的定义字符串,每个单元为文本的一行。 放了一个测试用的文本文件test.txt在matlab的current directory中,内容如下:
this is test.txt
it can help you test python.m
and matlab_readlines.py
测试:
在matlab的command window中输入:
》》 str=python(’matlab_readlines.py‘,’test.txt‘);
》》 eval([’c=‘ str])
c =
’this is test.txt‘ [1x29 char] [1x23 char]
》》 celldisp(c)
c{1} = this is test.txt
c{2} = it can help you test python.m
c{3} = and matlab_readlines.py
matlab如何调用python脚本文件的路径
python作为一个用途广泛的语言,提供了不少用于操作目录和文件路径的方法。而matlab虽然一开始是为了数学运算而设计的,但是同样提供了不少操作路径的函数,因为数学运算也少不了要和文件打交道。下面列出matlab和python中功能相同或相似的操作路径的方法,相信对于需要同时使用matlab和python的技术人员而言,有一些的作用。下面的讨论都是基于python2.6.4和matlab7.7。
(1) filesep - os.path.sep
filesep是matlab的一个函数,用于返回当前平台的目录分隔符,windows是,linux是/。在python中对应物为os.path.sep,但它不是一个函数,而是一个字符串。
(2) fullfile - os.path.join
matlab函数fullfile用于将若干个字符串连接成一个完整的路径,如matlab帮助文档中的例子:
f = fullfile(‘c:’, ‘applications’, ‘matlab’, ‘myfun.m’)
f =
c:applicationsmatlabmyfun.m
其在python中的对应物为os.path.join函数,例如:
》》》 os.path.join(‘c:\’, ‘lab’, ‘test.py’)
‘c:\lab\test.py’
但是在windows平台下os.path.join和matlab函数fullfile的行为有些许不同,例如,我们用上面matlab例子中的路径给os.path.join:
》》》 os.path.join(‘c:’, ‘applications’, ‘matlab’, ‘myfun.m’)
‘c:applications\matlab\myfun.m’
比较fullfile和os.path.join的结果,发现os.path.join的结果中c:后面没有添加分隔符。这并不是os.path.join的bug,而是它考虑了windows中c:与c:的区别:“c:”表示c盘,而“c:”表示当前目录,例如
c:lab》cd c:book
c:labook》
和下面的例子是等效的:
c:lab》cd 。ook
c:labook》
(3) fileparts - os.path.split, os.path.splitext
matlab函数filesep用于将一个完整的文件名分割为四个部分:路径,文件名,扩展名,版本号。在python中可以用os.path.split和os.path.splitext取得路径,文件名,扩展名,至于版本号用哪个我不太清楚。
(4) pathsep - os.path.sep
matlab函数pathsep返回当前平台的路径分隔符。windows平台为‘;’,linux为‘:’。在python中的对应物为os.pathsep,但它不是一个函数而是一个字符串。
(5) exist - os.path.exists
实际上matlab函数exist和python的os.path.exists有很大的不同。之所以放在一起,是因为它们都可以用于判断目录或者文件是否存在。matlab函数exist的功能要复杂很多,不像os.paht.exists只返回true和false,exist函数的返回值为整数,不同的数值代表了不同的含义。详情参阅matlab help。
(6) which - inspect.getsourcefile
matlab函数which可以通过一个函数或脚本名称得到它的完整路径。不仅如此,which还能处理函数重载的情况,例如:
》》 which abs(0)
built-in (d:programmatlabr2008b oolboxmatlabelfun@doubleabs) % double method
》》 which abs(single(0))
built-in (d:programmatlabr2008b oolboxmatlabelfun@singleabs) % single method
在python中与之功能类似的函数是inspect.getsourcefile,例如:
》》》 import random
》》》 import inspect
》》》 inspect.getsourcefile(random)
‘d:\program\python26\lib\random.py’
(7) isdir - os.path.isdir
matlab函数isdir和python的os.path.isdir都用于判断一个路径是否代表了一个目录。
(8) dir - os.listdir
matlab函数dir和os.listdir都用于列出一个目录的内容,但两者有区别。os.listdir的返回值为list类型,包含了目录内文件和目录的名称,而matlab函数dir的返回值为结构体数组类型,包含了如下的域:
name:文件或目录的名称;
date:修改日期
bytes:文件大小
isdir:是否是目录
datenum:修改日期
详细用法参考matlab help。
(9) cd - os.chdir
matlab函数cd用于切换当前工作目录。python中的对应物为os.chdir。ipython中可以直接用cd。
(10) pwd - os.getcwd
matlab函数pwd返回当前工作目录的路径,python中对应物为os.getcwd。在ipython中可直接用pwd。
人工智能如何刺激全球经济增长?
世界主要经济体亚欧美的工业机器人具体政策
从海外的智能家居市场可以反映中国市场什么问题
基于双CPU系统的工作原理及实现接口电路的应用设计
网状网络具备什么优势
matlab如何调用python脚本文件,路径是怎样的
以xCORE-200敲开千兆网IOT应用大门
使用虚拟实验设计预测先进FinFET技术的工艺窗口和器件性能
网分射频测试线的使用教程
好消息!中国新能源汽车产销连续第6年称霸全球
Modbus转Profinet网关的解决方案推荐
五要素微气象仪的介绍,它的产品特点是什么
NP2300HR(20v n沟道增强型MOSFET)
基于瑞萨MCU-R7的智能小车设计
TCL+黑莓之子即将开卖,全键盘+骁龙625,售价5999元
基于微带馈电和FR4介质板实现开口缝隙天线的设计
中芯国际因受美国的出口限制业绩有下滑风险?
国家电网积极推动储能产业发展“超级充电宝”助建新型能源体系
OV抢占三季度销售前两位 华为凭借mate9可翻身吗?
追求更小尺寸,3DIC将获得广泛应用?什么h是3DIC?传感器该如何使自己更“苗条”