太棒了!接下来我们来详细讲讲 Julia 的数组(Array),它是 Julia 最核心也最强大的数据结构之一。无论你是做科学计算、数据分析、机器学习还是图形处理,数组都无处不在!
🧱 一、数组的定义与基本操作
✅ 创建数组
a = [1, 2, 3, 4] # 一维数组
b = [1 2; 3 4] # 二维数组(矩阵)
c = zeros(3) # 三个元素都是 0.0 的数组
d = ones(Int, 2, 3) # 二行三列全是 1 的整数数组
e = rand(5) # 生成五个 0~1 间的随机数
✅ 索引与切片(注意:Julia 的索引从 1 开始!)
a[1] # 第一个元素
a[end] # 最后一个元素
a[2:4] # 取第2到第4个元素
b[2,1] # 取二维数组第2行第1列
✏️ 二、修改数组
a[2] = 99 # 修改第二个元素
push!(a, 10) # 添加元素到末尾
pop!(a) # 删除最后一个元素
insert!(a, 2, 50) # 在第2个位置插入元素
deleteat!(a, 3) # 删除第3个位置的元素
🔁 三、遍历数组
for i in a
println(i)
end
for i in eachindex(a)
println("第$i个元素是:", a[i])
end
📐 四、多维数组(矩阵)
A = [1 2 3;
4 5 6]
size(A) # 返回尺寸:(2, 3)
ndims(A) # 维度数量:2
length(A) # 总元素数量:6
A[:, 2] # 第二列
A[1, :] # 第一行
🧠 五、常用数组函数
函数 | 功能 |
---|---|
length(a) | 元素个数 |
size(a) | 数组维度 |
sum(a) | 求和 |
mean(a) | 求均值(需 using Statistics ) |
maximum(a) / minimum(a) | 最大/最小值 |
sort(a) | 排序 |
reverse(a) | 反转 |
findall(x -> x > 3, a) | 找出所有大于 3 的元素的索引 |
hcat(a, b) / vcat(a, b) | 水平或垂直拼接 |
🎯 六、数组推导式(列表生成)
squares = [i^2 for i in 1:10] # 生成 1 到 10 的平方
evens = [i for i in 1:20 if i % 2 == 0] # 过滤偶数
🔎 七、广播操作(点运算)
Julia 中支持 广播(Broadcasting),可直接对整个数组进行操作,加 .
即可:
a = [1, 2, 3]
b = a .^ 2 # 所有元素平方 => [1, 4, 9]
c = a .+ 1 # 所有元素加一
🧪 八、小练习推荐
# 创建一个 5×5 的二维数组,值为从 1 到 25,按行排列
A = reshape(1:25, 5, 5)
# 将所有奇数元素变成 0
A[A .% 2 .== 1] .= 0
🧰 九、实用技巧
- 使用
collect(1:10)
将范围转为数组 fill(7, 3, 3)
创建一个 3×3 全是 7 的数组reshape(arr, m, n)
把数组改成 m×n 形状(不复制)
🧵 十、小结
操作 | 示例 |
---|---|
创建 | [1,2,3] , zeros(3) , rand(2,2) |
索引 | a[1] , a[2:4] , A[:,2] |
修改 | a[2]=99 , push! , pop! |
遍历 | for i in a , eachindex |
推导式 | [i^2 for i in 1:5 if i%2==0] |
广播 | a .+ 1 , a .* b |
如果你想继续学习矩阵运算、线性代数、数据可视化或与 Python/Numpy 对比的写法,我可以继续为你整理。要不要深入点?
发表回复