3

NumPy でブロードキャストを使用してできることを、Breeze を使用して達成する一般的な方法はありますか?

具体的には、2 つの 3x4 行列に適用したい演算子がある場合、その操作を要素ごとに適用できます。ただし、私が持っているのは 3x4 行列と 3 要素の列ベクトルです。対応する行のベクトルの要素を使用して、行列の各要素に演算子を適用して作成された 3x4 行列を生成する関数が必要です。

したがって、部門の場合:

2 4 6   /  2 3  = 1 2 3
3 6 9             1 2 3

これが利用できない場合。導入を検討したいと思います。

4

2 に答える 2

3

mapPairs を使用して、探している「と思う」ものを実現できます。

  val adder = DenseVector(1, 2, 3, 4)

  val result = DenseMatrix.zeros[Int](3, 4).mapPairs({
    case ((row, col), value) => {
      value + adder(col)
    }
  })

  println(result)

1  2  3  4  
1  2  3  4  
1  2  3  4  

上記の単純な「加算器」から必要なものを適応できると確信しています。

于 2013-02-14T22:20:35.823 に答える
3

Breeze は、この種のブロードキャストをサポートするようになりました。

scala> val dm = DenseMatrix( (2, 4, 6), (3, 6, 9) )
dm: breeze.linalg.DenseMatrix[Int] = 
2  4  6  
3  6  9  

scala> val dv = DenseVector(2,3)
dv: breeze.linalg.DenseVector[Int] = DenseVector(2, 3)

scala> dm(::, *) :/ dv
res4: breeze.linalg.DenseMatrix[Int] = 
1  2  3  
1  2  3  

オペレーターは、*ブロードキャストする軸を指定します。Breeze は、スカラー型を除いて、暗黙的なブロードキャストを許可しません。

于 2014-01-24T01:48:48.363 に答える