Я новичок в Scala, и у меня возникает ментальная блокировка по поводу, казалось бы, простой проблемы. Я использую библиотеку Scala breeze
, и мне нужно взять array buffer
(изменяемый) и поместить результаты в матрицу. Это ... должно быть просто, но? Scala настолько безумно привязан к типу, что breeze
кажется действительно разборчивым в том, какие типы данных он будет использовать при создании DenseVector. Это всего лишь прототип кода, но может ли кто-нибудь помочь мне найти решение? Прямо сейчас у меня что-то вроде ...
//9 elements that need to go into a 3x3 matrix, 1-3 as top row, 4-6 as middle row, etc)
val numbersForMatrix: ArrayBuffer[Double] = (1, 2, 3, 4, 5, 6, 7, 8, 9)
//the empty 3x3 matrix
var M: breeze.linalg.DenseMatrix[Double] = DenseMatrix.zeros(3,3)
На ветру вы можете делать такие вещи, как M(0,0) = 100
и установите первое значение на 100 таким образом, Вы также можете делать что-то вроде: M(0, 0 to 2) := DenseVector(1, 2, 3)
который устанавливает первую строку в 1, 2, 3 Но я не могу заставить его делать что-то вроде ...
var dummyList: List[Double] = List(1, 2, 3) //this works
var dummyVec = DenseVector[Double](dummyList) //this works
M(0, 0 to 2) := dummyVec //this does not work
И успешно измените первую строку на 1, 2,3. И это с List, даже не с ArrayBuffer.
Я готов изменить типы данных из ArrayBuffer, но просто не уверен, как вообще к этому подойти ... мог бы попробовать обновить значения матрицы один за другим, но похоже, что было бы ОЧЕНЬ взломать код (?).
Примечание: я программист на Python, который привык использовать numpy
и просто давать ему массивы. В документации breeze
недостаточно примеров с другими типами данных, чтобы я еще мог это понять. Спасибо!
1 ответ
Breeze, помимо придирчивости к типам, довольно требователен к векторной форме: DenseVectors - это векторы-столбцы, но вы пытаетесь назначить подмножество строки, которое ожидает транспонированный DenseVector:
M(0, 0 to 2) := dummyVec.t
Похожие вопросы
Новые вопросы
scala
Scala - это язык программирования общего назначения, в основном предназначенный для виртуальной машины Java. Разработанный для краткого, элегантного и безопасного для типов представления общих шаблонов программирования, он сочетает в себе как императивный, так и функциональный стили программирования. Его ключевые особенности: продвинутая система статического типа с выводом типа; типы функций; сопоставления с образцом ; неявные параметры и преобразования; перегрузка оператора; полная совместимость с Java; совпадение