Преобразование от нативного матричного формата, Sivcing

StackOverflow https://stackoverflow.com//questions/20032010

  •  21-12-2019
  •  | 
  •  

Вопрос

Так этот вопрос связан с вопросом

Это было полезно?

Решение

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"))
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top