概述
创建数组
数组字面量
特殊数组
向量化函数的点语法
Author: Fenglielie
Copyright Notice: All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
Related Articles

2025-04-13
Julia 学习笔记——1. 概述
尝试学一下 Julia,但是这份笔记的时间跨度可能很长,有空就写一点吧。 需要说明的是,这个系列不是零基础的 Julia 笔记,而是直接从 Python 和 MATLAB 到 Julia 的迁移学习,并且笔记是围绕主题进行的,不是逐渐展开的。 介绍 Julia是一门新兴的科学计算语言,它的设计目标非常宏大:希望 Julia 可以同时拥有 Python/MATLAB 一样的易用性和 C/C++/Fortran 一样的运算效率。 Julia有很多与众不同的特点: 从设计定位来说,Julia 具有后发优势,是为 JIT 编译而量身定制的语言,目的是解决现在泾渭分明的动态语言和静态语言之间,优劣不能兼顾,因而必须组合使用的问题。 从计算效率的角度,虽然和Python在使用时很相似,但是Julia的计算效率却比Python高很多。Python的科学计算模块Numpy等必须依赖于C/C++编写的底层库,但是Julia自身就可以提供足够的科学计算能力(主要是通过预编译实现的)。 从语法设计的角度,Python并没有关注于科学计算编程中的便利性,Julia和MATLAB、Fortran、R语言...

2025-04-14
Julia 学习笔记——2. 基本数据类型与运算符
整数与浮点数 整数 Julia 支持固定长度的整数类型,包括有符号和无符号的版本,例如 Int8,Int32,UInt32 等。对于十进制整数字面量,在64位系统中默认使用 Int64 类型整数。可以使用 typeof() 查看字面量的类型(Python 对应的函数为 type()) 1typeof(1) # Int64 类型也是可以作为参数进行运算的,例如使用 typemin() 和 typemax() 直接查看类型的最大最小值 123typemin(Int32) # -2147483648typemin(Int64) # -9223372036854775808typemax(Int64) # 9223372036854775807 注: Julia 支持使用 _ 作为数字的分隔符,可以提高可读性,例如10_000。 由于整数的位数是固定的,在运算中自然也存在溢出问题,与其它语言中的处理类似,不再赘述。 Python 的整数是无限精度的,Julia 也提供了 BigInt 类型以支持无限精度。 对于非十进制的整数字面量,Julia 采用了不同的处理:默认将其视作无类型整数...

2025-04-14
Julia 学习笔记——3. 流程控制
简单过一遍 Julia 中的流程控制。 条件语句 if 条件语句和其它语言一样,注意其中的条件表达式不需要括号 123456789101112x = 3;y = 2;if x < y println("x is less than y")elseif x > y println("x is greater than y")else println("x is equal to y")end# x is greater than y C/C++ 使用 else if;Python 使用 elif;MATLAB 使用 elseif,Julia 也使用 elseif。 需要注意的是,Julia 要求 if 和 elseif 所接受的条件必须是 Bool 值,不接受隐式转换,例如下面的语句是错误的 123if 1 # error println("1 is true")end 还需要说明的是:和 Python 一样,Julia 在 if 语句中不会开辟独立的局部作...

2025-04-15
Julia 学习笔记——4. 函数基础
Julia 的函数与 Python 很类似,包括直接把函数视作变量,可以用函数赋值和作为参数传递等,两者最大的区别可能就是关键字 def 换成 function,除此以外都是一些细节差异。 基础 简单例子 最基本的例子如下 12345function f(x,y) x + yendf(1,2) # 3 和 Python 一样,Julia 的函数不需要额外的类似函数句柄的机制,函数对象可以和普通的值一样被传递。 12345function f(x,y) x + y;endg = f; g(1,2) # 3 函数的赋值形式 Julia 支持以单行的赋值形式定义简单的函数 1f(x, y) = x + y; 此时的函数体只能是一个单行表达式,这个表达式的结果自然就是函数的返回值。由于函数分派机制的存在,这种简单函数在 Julia 中实际上很常见。 return 语句 Julia 可以使用 return 语句返回值,但是和 Python 不同的是,Julia 在不使用 return 语句时,自动将最后一个表达式的结果作为函数返回值。为了代码可读性,还是不建议省略 return...

2025-04-15
Julia 学习笔记——5. 类型系统
Julia 具有强烈的学院派风格,类型系统设计的非常复杂,并且比 C++ 充满历史包袱的类型系统和模板机制精巧很多。 容器 元组和具名元组 Julia 支持和 Python 几乎一样的元组,元组中的元素可以是不同类型,例如 1234(1, 2)1, 2(1, "2", 3.0) 这里的括号在不存在歧义时可以省略,只含一个元素的元组和空元组有固定的写法,例如 12(1,)() 元组中的元素可以使用索引访问(索引从1开始),例如 123a = (1,'a');a[1] # 1a[2] # 'a' 和 Python 一样,Julia 的元组赋值可以自动解包,因此可以用来同时定义多个变量,例如 123(x,y,z) = (1,2,3)x,y,z = 1,2,3 与 Python 相比,Julia 的具名元组在语法上更加方便,例如 123a = (x=1, y=2);a.x # 1a.y # 2 这看起来非常适合用来打包不可变数据,比字典更加方便。 字典 Julia 的字典也和 Python 差不多,例如 123456789101...

2025-04-15
Julia 学习笔记——6. 函数进阶和宏
函数的参数类型 Julia 允许给函数的(一部分或全部)参数加上类型约束,例如 123function add2(x::Int64, y::Int64) return x + yend 正常使用例如 12add2(1, 3) # 4add2(Int64(1), Int64(10)) # 11 注意 Julia 不会对参数进行自动的类型转换,即使转换是安全无损的,例如 1add2(Int32(1), Int32(2)) # error 使用过于具体的参数类型约束通常不是合适的选择,可以使用更抽象的类型约束,例如使用一般的整数类型 123function add3(x::Integer, y::Integer) return x + yend 此时可以支持更多种类的参数进行调用,例如 12add3(Int32(1), Int32(10)) # 11add3(Int32(1), 10) # 11 注意到这里允许两个参数是不同的整数类型,Julia 提供了 where 关键字为泛型编程增加额外约束(类似 C++ 的 concepts 和 requires),例如要求两个参数的...