【转载】在Matlab中使用IronPython(一)——初步试验
2017-12-05 21:19
323 查看
原文地址:http://blog.sina.com.cn/s/blog_4513dde60101deda.html
本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 Unported许可协议进行许可。允许非商业转载,但应注明作者及出处。
作者:xialulee
最初发布于:2011年12月20日,http://blog.sina.com.cn/xialulee
以前尝试使用msscript.ocx在Matlab调用CPython,见《用msscript.ocx连接Matlab与ActiveX Script(一)——初步试验》。当时我想,因为Matlab中可以直接使用Java对象,在Matlab中调用Jython会不会更方便一些。但是由于不怎么懂Java,所以就没有付诸实践。前段时间,发现在Matlab中使用C#编写的代码很方便,见《让Matlab的任务栏图标显示进度(For
Win7)》,于是想,在Matlab中使用IronPython也应该不难吧。而且Matlab对于dotNet的支持还算全面,包括Generic,Delegate什么的。
今天晚上稍微试验了一下,发现确实不难。下面的代码是参照IronPython文档中的C#的例子写的。虽然我不怎么会玩C#,但是因为例子比较简单,看看就明白了。这也是我第一次玩IronPython,以前都没有装过。
稍微解释一下。创建IronPython的engine和scope,这些都不用说了。关键是scope的GetVariable方法,这个方法有Generic和non-Generic两个版本,其中Generic版本能够实现类型的转换,比如获取一个Python的callable对象时,其Generic的版本能够直接返回一个delegate。上面的例子中,在scope里用lambda创建了一个函数f,它有一个参数x。如果调用GetVariable时指定type parameter为Func<object, object>,则返回值为IronPython中的函数f对应的dele
4000
gate对象。之所以Func中有两个object,是因为第一个object代表的是参数,第二个是返回值。
今天只是简单试了试。没有继续深入探究。由于Matlab支持将Matlab函数转换成dotNet的delegate对象,想必以后可以琢磨出一些比较复杂的玩法。
本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 Unported许可协议进行许可。允许非商业转载,但应注明作者及出处。
作者:xialulee
最初发布于:2011年12月20日,http://blog.sina.com.cn/xialulee
以前尝试使用msscript.ocx在Matlab调用CPython,见《用msscript.ocx连接Matlab与ActiveX Script(一)——初步试验》。当时我想,因为Matlab中可以直接使用Java对象,在Matlab中调用Jython会不会更方便一些。但是由于不怎么懂Java,所以就没有付诸实践。前段时间,发现在Matlab中使用C#编写的代码很方便,见《让Matlab的任务栏图标显示进度(For
Win7)》,于是想,在Matlab中使用IronPython也应该不难吧。而且Matlab对于dotNet的支持还算全面,包括Generic,Delegate什么的。
今天晚上稍微试验了一下,发现确实不难。下面的代码是参照IronPython文档中的C#的例子写的。虽然我不怎么会玩C#,但是因为例子比较简单,看看就明白了。这也是我第一次玩IronPython,以前都没有装过。
% 2011.12.20 PM 09:50 % Matlab 7.12.0 % IronPython 2.7.1 % xialulee NET.addAssembly('IronPython'); import IronPython.Hosting.* engine = Python.CreateEngine(); scope = engine.CreateScope(); engine.CreateScriptSourceFromString('f = lambda x: x+3').Execute(scope); f = NET.invokeGenericMethod(scope, 'GetVariable', ... {NET.GenericClass('System.Func', 'System.Object', 'System.Object')}, 'f'); fprintf('f(2) = %d\n', f(2)); % output: f(2) = 5
稍微解释一下。创建IronPython的engine和scope,这些都不用说了。关键是scope的GetVariable方法,这个方法有Generic和non-Generic两个版本,其中Generic版本能够实现类型的转换,比如获取一个Python的callable对象时,其Generic的版本能够直接返回一个delegate。上面的例子中,在scope里用lambda创建了一个函数f,它有一个参数x。如果调用GetVariable时指定type parameter为Func<object, object>,则返回值为IronPython中的函数f对应的dele
4000
gate对象。之所以Func中有两个object,是因为第一个object代表的是参数,第二个是返回值。
今天只是简单试了试。没有继续深入探究。由于Matlab支持将Matlab函数转换成dotNet的delegate对象,想必以后可以琢磨出一些比较复杂的玩法。
相关文章推荐
- [转载]使用SOLARIS的初步设置
- [转载]使用MATLAB设计小波变换程序中的若干问题
- 初步探索如何使用Visual C#调用Matlab
- Android Studio使用Git(转载)经过自己成功试验后 使用正常
- [转载]Makefile使用初步
- [转载]Matlab中使用Plot函数动态画图方法总结
- matlab使用文本文件(.txt)进行数据存取的技巧总结(相当的经典,转载)
- 【转载】使用IronPython给.Net程序加点料
- MATLAB中使用FFT做频谱分析时频率分辨率问题(转载)
- ARM - PcDuino 初步使用- 挂载网络文件系统-【转载】
- (转载学习使用)Matlab画三维隐函数曲面
- [转载]gdb使用初步
- Redis进阶实践之七Redis和Lua初步整合使用(转载 7)
- 初步体验libsvm用法2(matlab下安装使用)
- 初步探索如何使用Visual C#调用Matlab
- 【转载】接触Matlab10年后的一个总结,随时使用Matlab要掌握的一些要点
- [转载]Matlab中使用Plot函数动态画图方法总结
- [转载]高效使用matlab之四:一个加速matlab程序的例子
- 【转载】ubutun中VanetMobiSim的安装和初步使用
- libSVM在MATLAB中的初步使用