相信很多朋友刚开始做算法时应该都是用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)
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
欢迎关注微信公众号 从数据分析到量化投资,在这里我们分享数据分析算法、量化投资策略、各种编程语言的实用技巧,并有免费的视频教程