Scala Breeze库DenseMatrix使用A(::,1)赋值列报类型不匹配错误求助
问题原因
你遇到的类型不匹配报错,本质是Scala编译器没有正确识别Breeze用于切片的::通配符,反而将其解析为标准库中List的伴生对象collection.immutable.::,因此抛出“需要Int类型却得到::类型”的错误。该问题和变量A用val还是var声明无关——你修改的是矩阵内部的元素值,不是修改A的引用指向,val声明的可变对象完全支持内部值修改。
解决方案
- 第一步:导入Breeze的切片通配符,可选择全局导入Breeze线性代数包:
import breeze.linalg._
也可以仅导入需要的::对象:
import breeze.linalg.::
- 第二步:重新执行赋值操作即可正常运行,完整可运行示例如下:
import breeze.linalg.{DenseMatrix, DenseVector, ::} val A = DenseMatrix.vertcat(DenseVector(11,12).toDenseMatrix, DenseVector(21,22).toDenseMatrix) A(::, 1) = DenseVector(13, 23) // 修改后的A输出为: // 11 13 // 21 23
内容的提问来源于stack exchange,提问作者gcc
相关产品推荐
相关产品推荐

