Преобразование от нативного матричного формата, Sivcing
Вопрос
Так этот вопрос связан с вопросом
Решение
Silving хранит редкое представление данных.Если вы хотите вывести густую матрицу (прежде всего, это не масштабируется, потому что строки будут больше, чем могут вписаться в память в какой-то момент), вам нужно будет перечислить все строки и столбцы:
// First, I highly suggest you use the TypedPipe api, as it is easier to get
// big jobs right generally
val mat = // has your matrix in 'row1, 'col1, 'val1
def zero: V = // the zero of your value type
val rows = IterableSource(0 to 1000, 'row)
val cols = IterableSource(0 to 2000, 'col)
rows.crossWithTiny(cols)
.leftJoinWithSmaller(('row, 'col) -> ('row1, 'col1), mat)
.map('val1 -> 'val1) { v: V =>
if(v == null) // this value should be 0 in your type:
zero
else
v
}
.groupBy('row) {
_.toList[(Int, V)](('col, 'val1) -> 'cols)
}
.map('cols -> 'cols) { cols: List[(Int, V)] =>
cols.sortBy(_._1).map(_._2).mkString("\t")
}
.write(TypedTsv[(Int, String)]("output"))
. Не связан с StackOverflow