【发布时间】:2014-02-12 13:23:56
【问题描述】:
如何将 breeze.linalg.DenseMatrix 的 Int 值的实例转换为 DenseMatrix 的 Doubles(两个矩阵具有相同的维度)?
(我正在尝试在矩阵中获取图像/图片以使用 Breeze 进行图像处理)
【问题讨论】:
标签: scala image-processing scala-breeze
如何将 breeze.linalg.DenseMatrix 的 Int 值的实例转换为 DenseMatrix 的 Doubles(两个矩阵具有相同的维度)?
(我正在尝试在矩阵中获取图像/图片以使用 Breeze 进行图像处理)
【问题讨论】:
标签: scala image-processing scala-breeze
fotNelton 的回答有效。另一种选择是:
dm.mapValues(_.toInt)
或
dm.values.map(_.toInt)
从 Breeze 0.6 开始,您还可以说:
convert(dm, Int)
【讨论】:
dm(_,_)。 breeze.generic.CanMapValues的对应实例我没有详细看,但是假设它更快是否正确?
DenseMatrix 到DenseMatrix 的CanMapValues 的实例可能不需要通过以下方式访问原始矩阵的元素通过apply 等索引每个元素。所以它可以节省无数次调用,只需从一个底层数组映射到另一个。
您可以为此使用DenseMatrix.tabulate:
scala> val dm = DenseMatrix((1.0, 2.0), (3.0, 4.0))
dm: breeze.linalg.DenseMatrix[Double] =
1.0 2.0
3.0 4.0
scala> val im = DenseMatrix.tabulate(dm.rows, dm.cols)(dm(_,_).toInt)
im: breeze.linalg.DenseMatrix[Int] =
1 2
3 4
【讨论】: