0

以下のコードは、0-1 マトリックスを生成し、奇数行ごとに変更して、新しいマトリックスを構成します。を使用してベクトルを連結したいのですが、 のゼロ (または単位) 要素が未知のサイズの空のベクトルであるため、foldLeftが得られます。Not all matrices have the same number of columnsfoldLeft

import breeze.linalg._
import breeze.stats.distributions._
object ZeroOneMatrix {
  def main(args: Array[String]) {
    val n = 4
    val m = DenseMatrix.rand[Int](n, n, rand = Rand.randInt(2))
    println(m)

    // vs is of type Vector[DenseVector[Int]]
    val vs = for (r <- 0 until n)
      yield {
        if (r % 2 == 1)
          m(r, ::).t map (e => (e + 1) % 2)
        else m(r, ::).t
      }
    println(vs)

    // compose matrix back from the list of vectors vs
    val f = (vs foldLeft DenseVector[Int]().asDenseMatrix)(
        (mat, v) => DenseMatrix.vertcat(v.asDenseMatrix, mat))
    println(f)
  }
}

どうすれば修正できますか?また、なぜトランスポンをmapしないと呼び出せないのでしょうか?m(r, ::)理想的には、選択したベクトルを新しいベクトルにマップし、それを使用DenseMatrix.horzcatしてマトリックスを構築します。

マトリックス全体で関数を使用しない理由mapは、一部の行が変更されないためです。

4

1 に答える 1