2017-01-09 1 views
0

저는 스칼라를 처음 접했고 쉽게 겉으로보기에는 쉬운 문제가 있습니다. 스칼라 라이브러리 breeze을 사용 중이며 array buffer (변경 가능)을 가져 와서 결과를 행렬에 넣어야합니다. 이건 ... 단순해야하지만? 스칼라는 매우 똑똑한 타입 캐스팅이다. breeze은 DenseVector를 만들 때 어떤 데이터 타입을 사용하는지에 대해 까다롭게 보였다. 이것은 프로토 타입 코드 일 뿐이지 만 누구나 솔루션을 제안 할 수 있습니까? 을 설정 M(0, 0 to 2) := DenseVector(1, 2, 3) : 지금 나는 바람에스칼라 라이브러리 브리즈로 행렬 채우기

//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에 첫 번째 값을 설정할 수 있습니다 ... 같은 것을 가지고, 은 또한 물건을 같이 할 수있는 나는 그것이 같은 뭔가를 얻을 수없는 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가 아니라 List가 있습니다.

ArrayBuffer에서 데이터 유형을 변경하려고하지만이 방법에 접근하는 방법을 모르겠다 ... 하나씩 매트릭스 값을 업데이트 해 볼 수는 있지만 코드 해킹이 매우 어려울 듯합니다 (?).

참고 : 저는 파이썬 프로그래머로서 numpy을 사용하고 그저 배열을 사용하는 데 익숙합니다. breeze 설명서는 다른 데이터 유형에 대한 예제를 제공하지 못해서 아직 설명하지 못했습니다. 감사합니다. DenseVectors 열 벡터,하지만 당신은 전치 DenseVector 기대 행의 하위 집합에 할당하려고 :

답변

2

Breeze는, 종류 이상의 pickiness뿐만 아니라, 벡터 모양에 대한 매우 까다 롭고입니다

M(0, 0 to 2) := dummyVec.t