概述
创建数组
数组字面量
特殊数组
向量化函数的点语法
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 if 语句整体在运行时会将对应分支的执行结果作为返回值,这相比于其他语言有点奇怪。 123456ju...

2025-04-15
Julia 学习笔记——4. 函数基础
Julia 中的函数与 Python 很类似,都是作为语言的一等公民,包括直接把函数视作变量,可以用函数赋值和作为参数传递等都是一样的,两者最大的区别可能就是关键字从 Python 的 def 换成 Julia 的 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 语句时,自动将最后...

2025-04-15
Julia 学习笔记——5. 变量作用域与类型系统
Julia 具有强烈的学院派风格,类型系统设计的非常复杂,并且比 C++ 充满历史包袱的类型系统和模板机制精巧很多。 变量作用域 Julia 有相对复杂的作用域机制,包括全局作用域,局部作用域,对于局部作用域又分为软作用域和硬作用域。 大部分语句都会产生作用域,但是有两个例外:begin 语句和 if 语句。 Julia 使用词法作用域,也就是说一个函数的作用域不继承自调用了函数的调用者作用域,而继承自该函数定义处作用域。 容器 元组和具名元组 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...

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),例如要求两个参数的...