Julia/Python/Matlab基本语法比较
相信很多朋友刚开始做算法时应该都是用matlab做理论模型的验证,后来Python又大火,很多小伙伴又争相学起来python,可过了没多久,一个更牛逼的语言又进入了我们的视野--Julia,号称是有matlab似的直观数学表达式,有C的运算速度。相信又有不少朋友蠢蠢欲动了,而小编发现在刚开始学习某种语言时或者在多个语言之间来回切换时,很容易把它的语法跟其他语言搞混,所以今天我们就整理了一份Julia/Python/Matlab三种算法工程师常用的编程语言的基本语法的比较,小伙伴们可以收藏起来,在忘记某个语法时拿出来看看。
基本数据类型
Python:数字、字符串、列表、元组、集合、字典
Matlab:数字、字符串、逻辑值、表、结构体、元胞数组、函数句柄
Julia:数字、字符串、自定义类型(struct/Union/Tuple/Array等)
注:julia 网上很多教程都是针对0.3版本,跟最新的1.0版有很多语法不太一样,在学习时最好看julia官方文档
Python | Matlab | Julia | |
基本操作 | |||
类型 | 动态语言,在运行期间才去做数据类型检查,因此无需指定数据类,在第一次赋值时会将数据类型记下 | 动态语言,但可以指定类型,添加类型会显著提高性能和系统稳定性 | |
值有类型,变量没有类型 | |||
整数 | 使用方法:x=1 可用x.bit_length()查看x的bit数,python中int型是没有大小限制的,理论上位宽可以无限大 | 使用方法:x=1 matlab中默认都是double类型,也可以用int16(x)将x转为16位有符号数 | 使用方法:x=1 在64位系统中默认是Int64类型的,可用typeof(x)查看x的类型,也可以用Int32(x)将x转成Int32类型 |
浮点数 | 使用方法:x=1.0 float型 | 使用方法:x=1.0 默认double型 | 使用方法:x=1.0 在64位系统中默认是Float64类型,也可以用Float32(x)将其转换为Float32类型 |
复数 | x = complex(1,2) x1 = x.real x2 = x.imag | x = 1 + 1i*2 x1 = real(x) x2 = imag(x) | x = 1 + 2im x1 = real(x) x2 = imag(x) |
分数 | x = 0.5 x.as_integer_ratio() | x = 0.5 formalt rat | x = 1//2 |
不同进制间转换 | x1 = int(0b1010) x2 = int(0x10) x3 = hex(10) x4 = bin(20) | x1 = bin2dec(‘1010’) x2 = hex2dec(‘a’) x3 = dec2hex(10) x4 = dec2bin(10) | x1 = 10 x2 = UInt8(x1) x3 = Int64(x2) Julia中对于整数只定义了Int和UInt两种类型,其中Int用10进制表示,UInt用16进制表示 |
字符串 | x1 = ‘a’ x2 = ‘abc’ x3 = “a” x3 = “abcd” 单双引号没有区别 | x1 = ‘a’ x2 = ‘abc’ 字符和字符串都用单引号 | x1 = ‘a’ x2 = “abc” 跟C一样,字符用单引号,字符串用双引号 |
查看数据类型函数 | a = [1,2,3] type(a) <class 'int'> | a = [1,2,3;4,5,6]; class(a) double | a = rand(3,3) typeof(a) Array(Float64,2) |
矩阵操作(Julia在矩阵操作方面跟MATLAB基本类似,函数用法也基本一致) | |||
矩阵 合并 | x = np.ones((2,3)) y = np.zeros((2,3)) np.hstack((x,y)) np.vstack((x,y)) | x = ones(2,3) y = zeros(2,3) [x,y]或[x y] [x;y] | x = ones(2,3) y = zeros(2,3) [x y] [x;y] 注:[x,y]是矩阵直接拼接,并不是将矩阵内的元素拼接 |
矩阵索引 | x的索引从0开始 | x的索引从1开始 | x的索引从1开始 |
矩阵维度 | x.shape | size(x) | size(x) |
矩阵求和 | x.sum() | sum(x) | sum(x) |
函数操作 | |||
函数 定义 | def f1(x): return x,x+1 | function [y1,y2] = f1(x) y1 = x; y2 = x + 1; end | function f1(x) x,x+1 end 简单形式: f(x,y) = x + y julia特殊用法: +(1,2,3)结果为6 |
匿名函数 多与map/filter等联用 | f = lambda x,y:x+y f(2,3) filter(lambda x:x+3,[1,2,3,4]) | f=@(x,y)x+y f(2,3) | map(x->x+1,[1,2,3]) |
不定长参数 (默认参数和关键值参数用法相同) | *表示不定长参数为list **表示不定长参数为dict def f1(*arg1,**arg2) print(arg1) print(arg2) f1(1,2,a=[1,2,3],b=9) | 函参中varargin表示变量个数 function f1(varargin) for i=1:numel(varargin) disp(varargin{i}) end f1(1,’abc’,345) | function f(x...) r1 = length(x) r2 = x[r1] return r1,r2 end print(f(1,2,3,4)) |
参数类型 | 无需指定,在函数调用时才会得到参数类型 | 无需指定,在函数调用时才会得到参数类型 | 可以不指定,也可以指定 function f1(x::Int64) end |
控制流 | |||
条件语句 | if flag<0: a = -1 elif: a = 0 else: a = 1 | if flag<=0 a = -1 elseif flag==0 a = 0 else a = 1 end | if flag<=0 a = -1 elseif flag==0 a = 0 else a = 1 end |
while语句 | while a<5: … | while a<5 … end | while a<5 … end |
for语句 | for i in range(10): … | for i = 0:9 … end | for i = 0:9 … end for k in [1,2,3,4] println(k) end |
欢迎关注微信公众号 从数据分析到量化投资,在这里我们分享数据分析算法、量化投资策略、各种编程语言的实用技巧,并有免费的视频教程
本文分享自微信公众号 - 科学计算Tech(Quant_Times)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
JavaScript代码是如何被执行的
基本概念 编译器,解释器 抽象语法树 字节码和机器码 编译器和解释器 计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。根据语言的执行流程,可以把语言分成编译型语言和解释型语言。 编译型语言:程序在执行之前需要一个专门的编译过程,把程序编译成 为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。如C、C++、go等. 解释型语言: 程序不需要编译,程序在运行时才翻译成机器语言(所以执行前需要环境中安装了解释器),每执行一次都要翻译一次。因此效率比较低。效率比较低,依赖解释器,跨平台性好。 编译型与解释型,两者各有利弊, 不能一概而论。前者由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像C/C++、Pascal/Object Pascal(Delphi)等都是编译语言,而一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言,如JavaScr...
- 下一篇
影响FPGA时序的进位链(Carry Chain), 你用对了么??
在FPGA中我们写的最多的逻辑是什么?相信对大部分朋友来说应该都是计数器,从最初板卡的测试时我们会闪烁LED,到复杂的AXI总线中产生地址或者last等信号,都会用到计数器,使用计数器那必然会用到进位链。 可能很多刚开始接触FPGA的同学没听过进位链,也就是Carry Chain,我们这里再回顾一下。FPGA的三个主要资源为: 可编程逻辑单元 可配置逻辑单元(Configurable Logic Block, CLB) 存储单元 运算单元(DSP48) 可编程I/O资源 布线资源 其中,CLB在FPGA中最为丰富,在7系列的FPGA中,一个CLB中有两个Slice,Slice中包含4个LUT6、3个数据选择器MUX、两个独立进位链(Carry4,Ultrascale是CARRY8)和8个触发器。 首先,我们来看下Carry Chain的结构原理,其输入输出接口如下: image 其中, CI是上一个CARRY4的进位输出,位宽为1; CYINT是进位的初始化值,位宽为1; DI是数据的输入(两个加数的任意一个),位宽为4; SI是两个加数的异或,位宽为4; O是加法结果...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7设置SWAP分区,小内存服务器的救世主
- Hadoop3单机部署,实现最简伪集群
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题