/ / Швидший спосіб зробити нульовий масив у Scala - масиви, scala

Швидше зробити нульовий масив в Scala - масиви, scala

Я створюю нульові масиви в Scala за допомогою (0 until Nrows).map (_ => 0).toArray але чи є щось швидше? map повільно

У мене таке саме запитання, але з 1 замість O, тобто я також хочу прискорити (0 until Nrows).map (_ => 1).toArray

Відповіді:

9 для відповіді № 1

Нуль - значення за замовчуванням для масиву Ints, тому просто зробіть це:

    val array = new Array[Int](NRows)

Якщо ви хочете, щоб усі ці значення були 1, використовуйте .fill () (завдяки @gourlaysama):

    val array = Array.fill(NRows)(1)

Однак, дивлячись на те, як це працює зсередини, це передбачає створення декількох об’єктів, які вам не потрібні. Я підозрюю, що наступний (потворніший) підхід може бути швидшим, якщо швидкість - це ваша головна проблема:

    val array = new Array[Int](NRows)
for (i <- 0 until array.length) { array(i) = 1 }

6 для відповіді № 2

Для багатовимірних масивів враховуйте Array.ofDim, наприклад,

scala> val a = Array.ofDim[Int](3,3)
a: Array[Array[Int]] = Array(Array(0, 0, 0), Array(0, 0, 0), Array(0, 0, 0))

Так само,

scala> val a = Array.ofDim[Int](3)
a: Array[Int] = Array(0, 0, 0)

У контексті тут,

val a = Array.ofDim[Int](NRows)

Щоб встановити (можливо, ненульові) початкові значення, розгляньте Array.tabulate, наприклад,

scala> Array.tabulate(3,3)( (x,y) => 1)
res5: Array[Array[Int]] = Array(Array(1, 1, 1), Array(1, 1, 1), Array(1, 1, 1))

scala> Array.tabulate(3)( x => 1)
res18: Array[Int] = Array(1, 1, 1)