You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Julia中如何删除矩阵指定列?对标numpy.delete等价方法

Julia 删除矩阵指定列的实现方法

Julia不需要额外引入第三方包,不管是原生索引语法还是标准库函数,都能实现和numpy.delete完全等价的按轴删除元素的效果,以下是对应示例的具体写法:

首先构造示例矩阵:

M = [0 1 2; 3 4 5; 6 7 8]

方法1:原生索引写法(最常用、性能最优)

Julia矩阵索引规则为[行筛选范围, 列筛选范围],要删除指定列,只需要在列索引位置传入排除目标列后的剩余列序号即可。
比如要删除第二列,直接写:

julia> M[:, [1,3]]
3×2 Matrix{Int64}:
 0  2
 3  5
 6  8

如果要动态生成排除后的列索引,不用手动枚举剩余列号,可以用setdiff做集合差集:

del_col = 2 # 要删除的列号,支持传入数组批量删除多列
M[:, setdiff(1:size(M,2), del_col)]

注意:这种写法不会修改原矩阵M,如果需要直接覆盖原矩阵,给M重新赋值即可。

方法2:标准库deleteat函数(和numpy.delete逻辑最接近)

如果你更习惯函数式调用,Julia标准库自带的deleteat可以直接指定维度删除元素,和numpy的参数逻辑几乎一致:

# 非修改原矩阵,沿列维度(dims=2)删除第2列
julia> deleteat(M, 2, dims=2)
3×2 Matrix{Int64}:
 0  2
 3  5
 6  8

如果需要直接修改原矩阵,用带感叹号的可变版本deleteat!即可:

deleteat!(M, 2, dims=2) # 执行后原矩阵M会直接变为删除第二列后的结果

扩展说明

  • 如果要删除行而不是列,只需要把维度参数改成dims=1,或者把索引位置换到行维度即可,比如删除第二行写M[setdiff(1:size(M,1), 2), :]
  • 批量删除多列时,直接给删除位置传入列号数组就行,比如同时删除第1、3列:deleteat(M, [1,3], dims=2)

内容的提问来源于stack exchange,提问作者Krish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 12:27:25