数组 #
一、数组基础 #
1.1 创建数组 #
使用方括号创建数组:
julia
arr1 = [1, 2, 3, 4, 5]
arr2 = ["a", "b", "c"]
arr3 = [1, 2.0, 3]
arr4 = []
1.2 数组类型 #
julia
typeof([1, 2, 3])
typeof([1.0, 2.0, 3.0])
typeof([1, 2.0, 3])
typeof([])
1.3 指定类型 #
julia
Int[1, 2, 3]
Float64[1, 2, 3]
String["a", "b", "c"]
Any[1, "a", 2.0]
1.4 创建特定大小的数组 #
julia
zeros(5)
zeros(Int, 5)
ones(3)
ones(Float64, 3)
fill(0, 5)
fill("hello", 3)
1.5 未初始化数组 #
julia
Vector{Int}(undef, 5)
Array{Int, 1}(undef, 5)
Matrix{Float64}(undef, 3, 3)
1.6 数组推导 #
julia
[x^2 for x in 1:5]
[x * y for x in 1:3, y in 1:3]
[x for x in 1:10 if x % 2 == 0]
二、数组索引 #
2.1 基本索引 #
Julia数组索引从1开始:
julia
arr = [10, 20, 30, 40, 50]
arr[1]
arr[5]
arr[end]
arr[begin]
2.2 负索引 #
Julia不支持负索引,但可以使用end:
julia
arr = [10, 20, 30, 40, 50]
arr[end]
arr[end-1]
arr[end-2]
2.3 越界检查 #
julia
arr = [1, 2, 3]
arr[0]
arr[4]
2.4 安全索引 #
使用getindex和get:
julia
arr = [1, 2, 3]
getindex(arr, 1)
get(arr, 4, nothing)
三、数组切片 #
3.1 基本切片 #
julia
arr = [1, 2, 3, 4, 5]
arr[1:3]
arr[2:end]
arr[begin:3]
arr[:]
3.2 步长切片 #
julia
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
arr[1:2:end]
arr[2:2:end]
arr[end:-1:begin]
3.3 视图 #
切片会创建新数组,使用view避免复制:
julia
arr = [1, 2, 3, 4, 5]
v = view(arr, 2:4)
v[1] = 20
arr
使用@view宏:
julia
@view arr[2:4]
@views arr[2:4] .+ 1
四、数组操作 #
4.1 添加元素 #
julia
arr = [1, 2, 3]
push!(arr, 4)
push!(arr, 5, 6)
pushfirst!(arr, 0)
append!(arr, [7, 8, 9])
4.2 删除元素 #
julia
arr = [1, 2, 3, 4, 5]
pop!(arr)
popfirst!(arr)
deleteat!(arr, 2)
splice!(arr, 2)
empty!(arr)
4.3 插入元素 #
julia
arr = [1, 2, 3]
insert!(arr, 2, 10)
splice!(arr, 2, [10, 20, 30])
4.4 修改元素 #
julia
arr = [1, 2, 3, 4, 5]
arr[1] = 10
arr[2:3] = [20, 30]
4.5 数组连接 #
julia
[1, 2, 3] ∪ [3, 4, 5]
vcat([1, 2], [3, 4])
hcat([1, 2], [3, 4])
[[1, 2], [3, 4]]
五、数组信息 #
5.1 大小和长度 #
julia
arr = [1, 2, 3, 4, 5]
length(arr)
size(arr)
ndims(arr)
eltype(arr)
isempty(arr)
5.2 查找元素 #
julia
arr = [1, 2, 3, 2, 4, 2]
findfirst(x -> x == 2, arr)
findlast(x -> x == 2, arr)
findall(x -> x == 2, arr)
findmax(arr)
findmin(arr)
5.3 检查元素 #
julia
arr = [1, 2, 3, 4, 5]
in(3, arr)
3 ∈ arr
3 ∉ arr
any(x -> x > 3, arr)
all(x -> x > 0, arr)
六、数组排序 #
6.1 排序 #
julia
arr = [3, 1, 4, 1, 5, 9, 2, 6]
sort(arr)
sort!(arr)
sort(arr, rev=true)
6.2 排序索引 #
julia
arr = [3, 1, 4, 1, 5, 9, 2, 6]
sortperm(arr)
arr[sortperm(arr)]
6.3 自定义排序 #
julia
arr = ["apple", "banana", "cherry"]
sort(arr, by=length)
sort(arr, by=uppercase)
sort(arr, lt=(a, b) -> length(a) < length(b))
6.4 部分排序 #
julia
arr = [3, 1, 4, 1, 5, 9, 2, 6]
partialsort(arr, 1:3)
partialsortperm(arr, 1:3)
七、数组统计 #
7.1 基本统计 #
julia
arr = [1, 2, 3, 4, 5]
sum(arr)
prod(arr)
minimum(arr)
maximum(arr)
extrema(arr)
7.2 统计函数 #
julia
using Statistics
arr = [1, 2, 3, 4, 5]
mean(arr)
median(arr)
std(arr)
var(arr)
7.3 累积操作 #
julia
arr = [1, 2, 3, 4, 5]
cumsum(arr)
cumprod(arr)
accumulate(+, arr)
accumulate(*, arr)
7.4 归约操作 #
julia
arr = [1, 2, 3, 4, 5]
reduce(+, arr)
foldl(+, arr)
foldr(+, arr)
mapreduce(x -> x^2, +, arr)
八、数组变换 #
8.1 map #
julia
arr = [1, 2, 3, 4, 5]
map(x -> x^2, arr)
[x^2 for x in arr]
8.2 filter #
julia
arr = [1, 2, 3, 4, 5]
filter(x -> x % 2 == 0, arr)
filter!(x -> x % 2 == 0, arr)
8.3 replace #
julia
arr = [1, 2, 3, 2, 4, 2]
replace(arr, 2 => 10)
replace!(arr, 2 => 10)
8.4 unique #
julia
arr = [1, 2, 3, 2, 4, 2, 3]
unique(arr)
unique!(arr)
allunique(arr)
8.5 reverse #
julia
arr = [1, 2, 3, 4, 5]
reverse(arr)
reverse!(arr)
九、多维数组 #
9.1 创建矩阵 #
julia
mat = [1 2 3; 4 5 6; 7 8 9]
zeros(3, 3)
ones(2, 4)
Matrix{Float64}(undef, 3, 3)
rand(3, 3)
9.2 矩阵索引 #
julia
mat = [1 2 3; 4 5 6; 7 8 9]
mat[1, 1]
mat[2, 3]
mat[end, end]
mat[1, :]
mat[:, 1]
mat[1:2, 2:3]
9.3 线性索引 #
julia
mat = [1 2 3; 4 5 6; 7 8 9]
mat[1]
mat[5]
CartesianIndices(mat)
LinearIndices(mat)
9.4 矩阵操作 #
julia
A = [1 2; 3 4]
B = [5 6; 7 8]
A * B
A + B
A - B
A'
transpose(A)
inv(A)
det(A)
9.5 高维数组 #
julia
arr3d = rand(2, 3, 4)
size(arr3d)
ndims(arr3d)
arr3d[1, 2, 3]
arr3d[:, :, 1]
十、广播 #
10.1 点语法 #
julia
arr = [1, 2, 3, 4, 5]
arr .^ 2
arr .+ 1
sin.(arr)
10.2 广播函数 #
julia
arr = [1, 2, 3, 4, 5]
broadcast(x -> x^2, arr)
broadcast(+, arr, 1)
broadcast(+, [1, 2], [3, 4])
10.3 多数组广播 #
julia
a = [1, 2, 3]
b = [10, 20, 30]
a .+ b
a .* b
10.4 广播赋值 #
julia
arr = [1, 2, 3, 4, 5]
arr .*= 2
arr .+= 1
十一、实践练习 #
11.1 练习1:数组统计 #
julia
function array_stats(arr)
(
length = length(arr),
sum = sum(arr),
mean = sum(arr) / length(arr),
min = minimum(arr),
max = maximum(arr),
unique_count = length(unique(arr))
)
end
array_stats([1, 2, 3, 4, 5, 3, 2, 1])
11.2 练习2:数组操作 #
julia
function remove_duplicates(arr)
seen = Set{eltype(arr)}()
result = similar(arr, 0)
for x in arr
if !(x in seen)
push!(result, x)
push!(seen, x)
end
end
return result
end
remove_duplicates([1, 2, 3, 2, 4, 3, 5])
11.3 练习3:矩阵运算 #
julia
function matrix_multiply(A, B)
rows_A, cols_A = size(A)
rows_B, cols_B = size(B)
cols_A == rows_B || error("Dimension mismatch")
C = zeros(rows_A, cols_B)
for i in 1:rows_A
for j in 1:cols_B
for k in 1:cols_A
C[i, j] += A[i, k] * B[k, j]
end
end
end
return C
end
A = [1 2; 3 4]
B = [5 6; 7 8]
matrix_multiply(A, B) == A * B
11.4 练习4:滑动窗口 #
julia
function sliding_window(arr, window_size)
[arr[i:i+window_size-1] for i in 1:length(arr)-window_size+1]
end
sliding_window([1, 2, 3, 4, 5], 3)
十二、总结 #
本章我们学习了:
- 数组创建:字面量、构造函数、推导式
- 数组索引:基本索引、切片、视图
- 数组操作:添加、删除、修改元素
- 数组排序:sort、sortperm、自定义排序
- 数组统计:sum、mean、reduce
- 多维数组:矩阵操作、高维数组
- 广播:点语法和broadcast函数
接下来让我们学习Julia的元组!
最后更新:2026-03-27