AnyMath 文档
Notebook

Julia,MATLAB和Python:科学计算的比较语法参考

导言

现代工程和科学计算越来越多地同时使用几种编程语言。 MATLAB在数学建模,Python在数据分析和自动化方面仍然很受欢迎,Julia正在积极开发作为科学计算的高性能语言。

尽管语法存在差异,但这些语言中的大多数基本结构都非常相似:数组,函数,循环,矢量化,图形和数据处理。 因此,在系统之间切换时,首先要理解句法对应关系。

这个例子是"语言中的操作→实现"格式的Julia,MATLAB和Python语法的实际比较。 比较格式不仅可以让您更快地学习新语言,还可以更好地理解科学编程的一般原则。 在许多情况下,只有记录的形式不同,而计算逻辑本身保持不变。

基本语法的比较

操作

茱莉亚

MATLAB

Python

评论

% comment

% comment

# comment

多行注释

#= ... =#

%{ ... %}

""" ... """

指派任务

x = 10

x = 10

x = 10

动态类型

x = 1; x = "hi"

x = 1; x = "hi"

x = 1; x = "hi"

类型验证

typeof(x)

class(x)

type(x)

一个整数

x = 10

x = int64(10)

x = 10

浮点数

x = 1.5

x = 1.5

x = 1.5

一个复数

1 + 2im

1 + 2i

1 + 2j

无限

Inf

Inf

float("inf")

NaN

NaN

float("nan")

s = "Hello"

s = "Hello"

s = "Hello"

字符串插值

"x = $x"

sprintf("x = %d", x)

f"x = {x}"

字符串连接

"a" * "b"

["a" "b"]

"a" + "b"

重复一行

"Hеllo"^3

repmat("Hеllo",1,3)

"Hello"*3

创建数组/向量

[1,2,3]

[1,2,3]

[1,2,3]

矩阵

[1 2; 3 4]

[1 2; 3 4]

np.array([[1,2],[3,4]])

索引从

1

1

0

对元素的访问

A[1,2]

A(1,2)

A[0,1]

最后一个元素

A[end]

A(end)

A[-1]

阵列的横截面

A[1:3]

A(1:3)

A[0:3]

逻辑索引

A[A .> 0]

A(A > 0)

A[A > 0]

数组的大小

size(A)

size(A)

A.shape

数组的长度

length(A)

length(A)

len(A)

创建空数组

zeros(3,3)

zeros(3,3)

np.zeros((3,3))

创建单位矩阵

I(3) / Matrix(I,3,3)

eye(3)

np.eye(3)

范围

1:10

1:10

range(1,11)

范围步骤

1:2:10

1:2:10

range(1,11,2)

元素乘法

A .* B

A .* B

A * B

矩阵乘法

A * B

A * B

A @ B

零碎程度

A .^ 2

A .^ 2

A ** 2

矩阵划分

A \ b

A \ b

np.linalg.solve(A,b)

换位,换位

A'

A'

A.T

水平连接数组

[A B]

[A B]

np.hstack((A,B))

垂直连接数组

[A; B]

[A; B]

np.vstack((A,B))

If条件

if x > 0 ... end

if x > 0 ... end

if x > 0:

三元运算符

x > 0 ? a : b

ifelse(x>0,a,b)

a if x>0 else b

For循环

for i in 1:10 ... end

for i in 1:10 ... end

for i in range(10):

While循环

while x > 0 ... end

while x > 0 ... end

while x > 0:

循环中断

break

break

break

跳过迭代

continue

continue

continue

功能(简略)

f(x)=x^2

f = @(x) x^2

f = lambda x: x**2

功能(正常)

function f(x) ... end

function y=f(x) ... end

def f(x):

返回值

return x

return x

return x

匿名函数

x -> x^2

@(x) x^2

lambda x: x**2

列表生成器

[x^2 for x in 1:5]

arrayfun(@(x)x^2,1:5)

[x**2 for x in range(1,6)]

字典

Dict("a"=>1)

containers.Map()

{"a":1}

很多

Set([1,2])

unique([...])

set([1,2])

检查配件

x ∈ A

ismember(x,A)

x in A

异常处理

try ... catch e ... end

try ... catch ... end

try ... except Exception as e:

错误生成

error("msg")

error("msg")

raise Exception("msg")

结构/类别

struct Point ... end

classdef Point ... end

class Point:

抽象类型

abstract type Shape end

classdef (Abstract)

from abc import ABC

导入模块

using LinearAlgebra

import pkg.*

import numpy as np

连接文件

include("a.jl")

run("a.m")

import module

功能的文档

""" doc """

% help text

""" doc """

@time, @show

失踪

失踪

测量时间

@time expr

tic; ...; toc

timeit()

输出到控制台

println(x)

disp(x)

print(x)

格式化输出

@printf

fprintf

print(f"...")

使用DataFrame

DataFrame(...)

table(...)

pd.DataFrame(...)

图表

plot()

plot()

matplotlib.pyplot.plot()

一个随机数

rand()

rand()

random.random() / np.random.rand()

分类方法

sort(A)

sort(A)

sorted(A)

地图功能

map(f,A)

arrayfun(f,A)

map(f,A)

过滤

filter(f,A)

A(mask)

filter(f,A)

平等检查

==

==

==

身份验证

===

isequal

is

缺失值

missing

missing

None / np.nan

无/空

nothing

[]

None

结论

Julia,MATLAB和Python在现代工程和科学任务中与其说是相互竞争,不如说是相辅相成的。 尽管哲学和语法细节存在差异,但它们之间的大多数计算构造都有直接的类似物。

比较格式有助于更快地学习新工具,在生态系统之间转移算法,并更好地理解科学编程的一般原则。 这在Engee多语言环境中尤为重要,在该环境中,可以在同一项目中使用不同的语言。