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

Scala Breeze中能否删除矩阵的行或列?

当然可以在Scala Breeze里实现矩阵行/列的删除操作!和Matlab直接把目标行列设为空的方式不同,Breeze因为对矩阵维度有严格的类型约束,不能直接这么干,得通过筛选保留的行列索引来构造新矩阵,我给你举几个实用的例子:

首先我们先定义一个测试用的3x3矩阵:

import breeze.linalg._
val mat = DenseMatrix((1,2,3), (4,5,6), (7,8,9))

删除行操作

删除单行

比如要删除索引为1的行(Breeze是0-based索引,也就是矩阵的第二行),你可以生成排除目标行的索引序列,再用这个序列去切片矩阵:

// 生成保留的行索引:0和2
val keepRows = 0 until mat.rows filter (_ != 1)
val matWithoutRow1 = mat(keepRows, ::)
// 或者直接指定要保留的行索引数组
val matWithoutRow1 = mat(Array(0,2), ::)

删除多行

如果要删除多个行,比如索引0和2的行,同样用筛选索引的方式:

// 只保留索引为1的行
val keepRows = 0 until mat.rows filter (i => !(i == 0 || i == 2))
val matWithoutRows0And2 = mat(keepRows, ::)
// 或者直接写保留的行索引
val matWithoutRows0And2 = mat(Array(1), ::)

删除列操作

思路和删除行完全一致,只是把操作对象换成列索引:

删除单列

比如删除索引为1的列(第二列):

val keepCols = 0 until mat.cols filter (_ != 1)
val matWithoutCol1 = mat(::, keepCols)
// 或者直接指定保留的列索引
val matWithoutCol1 = mat(::, Array(0,2))

删除多列

要删除索引0和2的列:

val keepCols = 0 until mat.cols filter (i => !(i == 0 || i == 2))
val matWithoutCols0And2 = mat(::, keepCols)

本质上这些操作都是通过选取需要保留的元素来创建新矩阵,因为Breeze的原始矩阵维度不可动态修改,所以不能直接在原矩阵上删除行列,必须生成新的矩阵对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:13:31