Julia中移除数组元素并缩减尺寸的实现方法(含二维行数组场景)
回答
问题1:移除一维数组的第三个元素
在Julia里,你可以用deleteat!函数(原地修改原数组)或者deleteat函数(返回新数组,不改动原数组)轻松实现这个需求。
方法1:直接修改原数组
如果希望直接更新原来的array变量,用带感叹号的deleteat!(感叹号在Julia里通常表示“原地修改”的语义):
# 先创建目标数组 array = zeros(10) for i in 1:10 array[i] = 2*i + 3 end # 移除第三个元素(Julia数组索引从1开始,对应索引3) deleteat!(array, 3)
执行后array就会变成你想要的9元素数组:
9-element Array{Float64,1}: 5.0 7.0 11.0 13.0 15.0 17.0 19.0 21.0 23.0
方法2:生成新数组(保留原数组)
如果你不想改变原数组的内容,用不带感叹号的deleteat,它会返回一个删除元素后的新数组:
new_array = deleteat(array, 3)
这样原array保持不变,new_array就是你需要的目标数组。
问题2:二维行数组删除元素(不转列向量)
正如报错提示的,deleteat!只支持一维数组操作,所以直接用它处理二维行数组会失败。不过我们可以通过切片操作来实现需求,完全不需要转换为列向量。
删除指定位置的列(以删除第1列为例)
对于你的二维行数组a = [1 2 3 4 5],要删除第1个元素(对应数组的第1列),直接取第2列到最后一列的切片即可:
a = [1 2 3 4 5] new_a = a[:, 2:end]
执行后new_a就是你想要的1×4二维行数组:
1×4 Array{Int64,2}: 2 3 4 5
删除任意位置的列
如果要删除第k列(比如k=3),可以用vcat拼接前后的列索引,灵活实现任意位置的删除:
k = 3 new_a = a[:, vcat(1:k-1, k+1:end)]
这样就能得到删除第3列后的1×4数组:
1×4 Array{Int64,2}: 1 2 4 5
原地修改二维行数组(可选)
如果你想直接更新原数组,可以通过重新赋值切片的方式实现:
a[:, :] = a[:, 2:end]
执行后原a就会被更新为1×4的行数组。
内容的提问来源于stack exchange,提问作者Julien
相关产品推荐
相关产品推荐

