2017-01-18 5 views
2

Скажем, у меня есть 2 векторов той же размерности:Scala Breeze декартово произведение векторов

scala> val v = DenseVector(3.0, 4.0) 
v: breeze.linalg.DenseVector[Double] = DenseVector(3.0, 4.0) 

scala> val w = DenseVector(5.0, 6.0) 
w: breeze.linalg.DenseVector[Double] = DenseVector(5.0, 6.0) 

Как я могу вычислить матрицу из него, содержащие все продукты (нечто вроде декартова произведения в дб говорят):

scala> val x = DenseMatrix(
    | (v(0) * w(0), v(0) * w(1)), 
    | (v(1) * w(0), v(1) * w(1)) 
    |) 
x: breeze.linalg.DenseMatrix[Double] = 
15.0 18.0 
20.0 24.0 

Я чувствую, что вы должны иметь возможность делать это с помощью трансляции, но я не могу понять, как это сделать. Спасибо.

ответ

3

Это только внешнее произведение двух векторов:

scala> import breeze.linalg._ 
import breeze.linalg._ 

scala> val v = DenseVector(3.0, 4.0) 
v: breeze.linalg.DenseVector[Double] = DenseVector(3.0, 4.0) 

scala> val w = DenseVector(5.0, 6.0) 
w: breeze.linalg.DenseVector[Double] = DenseVector(5.0, 6.0) 

scala> v * w.t 
res0: breeze.linalg.DenseMatrix[Double] = 
15.0 18.0 
20.0 24.0 
+0

Thx. См. Также https://en.wikipedia.org/wiki/Outer_product – botkop

+0

Кажется, что это решение не работает при использовании Vector вместо DenseVector. Любая идея почему? – mathk