如何在Matrix中插入1的向量?

时间:2016-12-10 00:11:52

标签: scala scala-breeze

我有一个向量和一个矩阵:

1
1

0 0
0 0

我想将矢量添加到矩阵中以产生:

1 0 0
1 0 0

我到目前为止:

val dv = DenseVector(1.0,1.0);
val dm = DenseMatrix.zeros[Double](2,2)

阅读API:http://www.scalanlp.org/api/breeze/#breeze.linalg.DenseMatrix 以及这两个文档: https://github.com/scalanlp/breeze/wiki/Quickstart https://github.com/scalanlp/breeze/wiki/Linear-Algebra-Cheat-Sheet

但是此操作似乎不可用?

是否有方法/函数将1的向量预先添加到Matrix?

2 个答案:

答案 0 :(得分:4)

这里的另一种选择。首先将 DenseVector 转换为 2X1 矩阵,然后使用 DenseMatrix.horzcat()方法:

val newMat = DenseMatrix.horzcat(new DenseMatrix(2,1,dv.toArray), dm)

# breeze.linalg.DenseMatrix[Double] = 1.0  0.0  0.0  
#                                     1.0  0.0  0.0

newMat.rows
# 2
newMat.cols
# 3

答案 1 :(得分:1)

您可以创建一个函数来创建一个密集矩阵,其中包含一列前置的

def prependOnesColumn[V](original: DenseMatrix[V]): DenseMatrix[V] = {
  val ones = DenseMatrix.ones(original.rows, 1)
  val dataWithOnes = ones.data ++ original.data
  DenseMatrix.create(original.rows, original.cols + 1, dataWithOnes)
}