저는 R과 MATLAB을 사용하기 전에 비교적 새로운 스칼라를 사용했습니다. 나는 스칼라에 다음 코드를 작성했다. 나는 R과 MATLAB에서 같은 코드를 작성했으며 두 가지 모두 잘 동작한다. 그러나 스칼라에 대한 나의 경험 부족으로 아래의 코드는 작동하지 않는다. 다른 함수에서 참조 함수를 사용한 스칼라
import breeze.linalg._
import breeze.numerics.exp
import scala.math.log
val data = breeze.stats.distributions.Uniform(0, 1)
val ep: DenseMatrix[Double] = DenseMatrix.rand(39, 3, data).t
val a = DenseVector(1.0)
val out: DenseMatrix[Double] = tile(a, 1, 39)
val fout: DenseVector[Double] = out.toDenseVector
val A: Double = 0.0
val B: Double = 1.0
val eta: Double = 2.0/Math.pow(B - A, 2.0)
val nCol: Int = 39
val nRow: Int = 3
var gA = 0.0
var gB = 0.0
var gamma = 0.0
def SubstFunction(predictions: DenseVector[Double], expertsPrediction: DenseVector[Double]): Double = {
gA = -(1/eta) * log(predictions dot exp(-eta * (expertsPrediction :- A)) :^ 2.0)
gB = -(1/eta) * log(predictions dot exp(-eta * (expertsPrediction :- B)) :^ 2.0)
gamma = (0.5 * (B + A)) - ((gB - gA)/2 * (B - A))
gamma
}
def prediction(Input: DenseMatrix[Double], outcomes: DenseVector[Double]): DenseVector[Double] = {
var weights = DenseVector(1.0,1.0,1.0)
val AAprediction = DenseVector.fill(nCol)(0.0)
//DenseVector.ones[Double](nCol).t
for (l<-0 to Input.cols) {
val normalisedWeights = weights/sum(weights)
AAprediction(l) = SubstFunction(normalisedWeights, Input(::,l))
weights = normalisedWeights :* exp(eta :* (Input(::,l) :- outcomes(l)) :^ 2.0).toDenseVector
}
AAprediction: DenseVector[Double]
}
prediction(ep,fout)
나는 예측 그것에
sbstFunction
를 호출 할 때 문제가있을 것 같아요. IntelliJ에서 스칼라 워크 시트를 사용하고 있습니다. 나는이 코드를 실행하면 나는 오류를 얻을하지만 난 숫자 출력을하지 않는 대신에 내가 얻을 :
<function1> res1: Unit =()
업데이트 :
: 나는 코드를 수정하고 지금은 다음과 같은 오류를 얻고있다Column must be in bounds for slice!
누군가 내가 잘못하고있는 것을 이해하도록 도와 줄 수 있습니까?
이렇게하면 코드에 몇 가지 문제가 발생합니다. 이는 내 코드가 올바르지 않다는 것을 의미합니다. 도와 주셔서 감사합니다. – Jamil