scala breeze решает разреженную систему AX=B, как построить B

В отношении ответа NOAH о том, как использовать CSCMatrix

как построить матрицу Б, из каких элементов она состоит?


person Francois Saab    schedule 26.11.2016    source источник


Ответы (1)


Похоже, что матрицы CSC поддерживают только столбцы B в форме DenseVector:

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

scala> import breeze.numerics._
import breeze.numerics._

scala> val A = CSCMatrix((1d,0d,0d),(0d,1d,0d),(0d,0d,1d))
A: breeze.linalg.CSCMatrix[Double] =
3 x 3 CSCMatrix
(0,0) 1.0
(1,1) 1.0
(2,2) 1.0

scala> val B = DenseVector(3d,4d,5d)
B: breeze.linalg.DenseVector[Double] = DenseVector(3.0, 4.0, 5.0)

scala> A \ B
res0: breeze.linalg.DenseVector[Double] = DenseVector(3.000000000000001, 4.000000000000002, 5.000000000000001)
person evan.oman    schedule 30.11.2016
comment
: вы правы с точки зрения API, но моя проблема в том, что этот код не компилируется. получаю следующее: Ошибка: (44, 9) не удалось найти неявное значение параметра op: breeze.linalg.operators.OpSolveMatrixBy.Impl2[breeze.linalg.CSCMatrix[Double],breeze.linalg.DenseVector[Double],This ] A \ B ^ Ошибка: (44, 9) недостаточно аргументов для метода \: (неявная операция: breeze.linalg.operators.OpSolveMatrixBy.Impl2[breeze.linalg.CSCMatrix[Double],breeze.linalg.DenseVector[Double] ,Тот])Тот. Параметр неопределенного значения op. А \ Б ^ - person Francois Saab; 02.12.2016
comment
Хм, значит, использование DenseVector вместо B не работает? Какую версию Breeze вы используете? - person evan.oman; 02.12.2016
comment
если я посмотрю в intellijidea: это breeze-macros_2.10-0.11.2.jar - person Francois Saab; 02.12.2016
comment
да A работает, если я дам ему другую разреженную матрицу. например, A/B B должен быть разреженной матрицей того же размера, что и A. Я не понимаю, почему? но если это так, я задаю здесь математический вопрос, как построить матрицу B, чтобы она содержала значения вектора b. - person Francois Saab; 02.12.2016