заполнение матрицы ветерком из библиотеки Scala

Я новичок в 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)

В breeze вы можете делать такие вещи, как 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. И это со списком, даже не с ArrayBuffer.

Я готов изменить типы данных из ArrayBuffer, но просто не знаю, как к этому подойти вообще... можно попробовать обновить значения матрицы одно за другим, но похоже, что было бы ОЧЕНЬ хакерским кодом (?).

Примечание. Я программист Python, который привык использовать numpy и просто задавать ему массивы. В документации breeze недостаточно примеров с другими типами данных, чтобы я мог это понять. Спасибо!


person SnarkShark    schedule 09.01.2017    source источник


Ответы (1)


Breeze, помимо придирчивости к типам, довольно требователен к форме вектора: DenseVectors — это векторы-столбцы, но вы пытаетесь назначить подмножество строки, которая ожидает транспонированный DenseVector:

M(0, 0 to 2) := dummyVec.t
person dlwh    schedule 10.01.2017