| 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 |