Я пытаюсь создать общую функцию repVec
, аналогичную функции Matlab repmat
с использованием Scala Breeze.Scala Abstract Typing with Tabulate
Сначала я попробовал:
def repVec[T](in: DenseVector[T], nRow: Int): DenseMatrix[T] =
{
DenseMatrix.tabulate[T](nRow, in.size){case (_, j) => in(j)}
}
, но это дало мне ошибку:
Error:(112, 41) No ClassTag available for T
DenseMatrix.tabulate[T](nRow, in.size){case (_, j) => in(j)}
^
Error:(112, 41) not enough arguments for method tabulate: (implicit evidence$15: scala.reflect.ClassTag[T], implicit evidence$16: breeze.storage.Zero[T])breeze.linalg.DenseMatrix[T].
Unspecified value parameters evidence$15, evidence$16.
DenseMatrix.tabulate[T](nRow, in.size){case (_, j) => in(j)}
^
После выполнения некоторого чтения, particularily here, я попробовал, добавив неявный TypeTag
вот так:
def repVec[T](in: DenseVector[T], nRow: Int)(implicit tag: TypeTag[T]): DenseMatrix[T] =
{
DenseMatrix.tabulate[T](nRow, in.size){case (_, j) => in(j)}
}
Но у меня такая же ошибка.
Любые мысли о том, что происходит? Как мое использование отличается от этого примера (из ссылки), которое я могу построить просто отлично?
def gratuitousIntermediateMethod[T](list:List[T])(implicit tag :TypeTag[T]) =
getInnerType(list)
def getInnerType[T](list:List[T])(implicit tag:TypeTag[T]) = tag.tpe.toString
Edit:
Необходимое ClassTag
и Zero
, здесь полное решение:
def repVec[T:ClassTag:Zero](in: DenseVector[T], nRow: Int): DenseMatrix[T] =
{
DenseMatrix.tabulate[T](nRow, in.size)({case (_, j) => in(j)})
}
Хм, вы меняете неявный бит на '(неявный тег: ClassTag [T]):'? –
Хорошо, я добавил «ClassTag», как [so] (http://pastebin.com/jhuvuhFf). Я получаю ошибку: 'не удалось найти неявное значение для параметра доказательства типа breeze.storage.Zero [T]'. Это потому, что 'DenseMatrix' ограничивается числовыми типами, такими как' Double', 'Int' и т. Д.? Я заметил это: '@spec (Double, Int, Float, Long) V' в определении' DenseMatrix', мне нужно сделать что-то подобное? –
Nevermind, получил его, необходимо 'repVec [T: ClassTag: Zero]' –