Kotlinで移動平均を計算するための最速/最も簡単な方法は何ですか?

OriolJ

Kotlinで移動平均を計算するためのいくつかの汚い方法を考えることができますが、どれが最適かわかりません。kotlinには、コレクションやリストを操作するための興味深い機能がたくさんあることを私は知っています。移動平均を計算するための最も効率的な(または最も簡単な)方法は何だと思いますか?

Strelok

Kotlin 1.2では、明らかに組み合わせることができるスライディングウィンドウが導入されますaverage

val data = listOf(1,2,5,6,2,7,8,5,9)
// 3 "period" moving average
val movingAverage = data.windowed(3,1,List<Int>::average)
// OR
val movingAverage = data.windowed(3,1) { it.average() }

それまでは、独自のスライドシーケンスを導入する必要があります。

class SlidingSequence<out T>(val source: Iterable<T>,
                                      val slideSize: Int,
                                      val slideStep: Int) : Sequence<List<T>> {
    override fun iterator(): Iterator<List<T>> = object : AbstractIterator<List<T>>() {
        private val iterator = if (slideSize > 0) source.iterator() else emptyList<T>().iterator()
        private var buffer = listOf<T>()

        override fun computeNext() = when {
            iterator.hasNext() -> {
                buffer = buffer.drop(slideStep).let {
                    it + iterator.asSequence().take(slideSize - it.size)
                }
                setNext(buffer)
            }
            else -> done()
        }
    }
}

fun <T> Iterable<T>.windowed(size: Int,
                          step: Int = 1): Sequence<List<T>> {
    return SlidingSequence(this, size, step)
}

// and then you can do
val data = listOf(1,2,5,6,2,7,8,5,9)
// 3 "period" moving average
val movingAverage = data.windowed(3).map(List<Int>::average)

PS。Kotlin 1.2windowed実装のコードを見ていませんが、関数はすぐに変換されるため、結果は怠惰ではないと思います。上記の自己実装の場合は怠惰な結果なので、実際に列挙する必要があります.toList()実際の値を取得するようなもの持つシーケンス

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

PostgreSQLで12か月の移動平均を計算する簡単な方法はありますか?

衝突時のボールの位置を計算する最も簡単な方法は何ですか?

衝突時のボールの位置を計算する最も簡単な方法は何ですか?

特定の場所でインデックスを見つけるための最も簡単で計算効率の高い方法は何ですか?

JAXで単語ベクトルの移動平均を計算するための最良の方法

Scalaで最小ヒープを作成するための最も簡単で効率的な方法は何ですか?

C ++ 20の場合範囲内の隣接するペアを計算するための最も簡潔で明確な方法は何ですか?

サーバー間でElasticSearchデータを移動する最も簡単な方法は何ですか

タイプトークン比率を計算する最も簡単な方法は何ですか?

Rspec3.xにアップグレードするための最速/最も簡単な方法は何ですか

Javaで金種を計算するためのより簡単で簡単な方法はありますか?

C#でメソッド名を動的に取得するための最も簡単で安価な方法は何ですか?

javascriptで複数のアイテムの合計価格と数量を計算する最も簡単な方法は何ですか?

XamarinFormsでcsvを検索するための最速かつ最も効率的な方法は何ですか?

TensorFlowを使い始める最も簡単な方法は何ですか?

LaTeXを使い始める最も簡単な方法は何ですか?

Maven2で、WARとそのWARを単一のPOMに含めるためのEARを構築する最も簡単な方法は何ですか?

コマンドラインで計算する最も簡単な方法は何ですか?

2時間の時間間隔で平均を計算する最も効率的な方法は何ですか

符号に従って浮動小数点を丸める最も簡単な方法は何ですか

スケジュール内の特定の時間数を超える稼働日数を計算するExcelの最も簡単な方法は何ですか?

単純な構造のデータを保存およびクエリする最も簡単で最速の方法は何ですか?

この文字列をリストにフォーマットする最も簡単ですが、最速ではない方法は何ですか?Python

初心者の質問-csvファイル内のポイント間の距離を計算する最も簡単な方法は何ですか?

空のshared_ptrを作成する最も簡単な方法は何ですか?

ターミナルの現在のディレクトリにファイルを移動する最も簡単な方法は何ですか?

各値を配列内の独自のインデックスに移動する最も簡単な方法は何ですか?

Delphi 10.3 Community EditionでSQLiteを使用するための最良かつ簡単な方法は何ですか?

xamppでサブドメインを作成するための最良かつ簡単な方法は何ですか

TOP 一覧

  1. 1

    PictureBoxで画像のブレンドを無効にする

  2. 2

    レスポンシブウェブサイトの一番下にスティッキーなナビゲーションバーを作成するのに問題がある

  3. 3

    Rパッケージ「AppliedPredictiveModeling」のインストール中にエラーが発生しました

  4. 4

    Chromeウェブアプリのウェブビューの高さの問題

  5. 5

    HTTPヘッダー 'SOAPAction'の値はサーバーによって認識されませんでした

  6. 6

    Pythonを使用して、リストからデータを読み取り、特定の値をElasticsearchにインデックス付けするにはどうすればよいですか?

  7. 7

    C ++でのcURLとマルチスレッドの使用

  8. 8

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  9. 9

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  10. 10

    STSでループプロセス「クラスパス通知の送信」のループを停止する方法

  11. 11

    Spring @ModelAttributeモデルフィールドマッピング

  12. 12

    Python / SciPyのピーク検出アルゴリズム

  13. 13

    Ansibleで複数行のシェルスクリプトを実行する方法

  14. 14

    テキストフィールドの値に基づいて UIslider を移動します

  15. 15

    tf.nn_conv2dとtf.nn.depthwise_conv2dの違い

  16. 16

    ZScalerと証明書の問題により、Dockerを使用できません

  17. 17

    MLでのデータ前処理の背後にある直感

  18. 18

    Postmanを使用してファイル付きの(ネストされた)jsonオブジェクトを送信する

  19. 19

    java.lang.NoClassDefFoundError:com / sun / istack / tools / DefaultAuthenticator $ Receiver

  20. 20

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  21. 21

    BLOBストレージからデータを読み取り、Azure関数アプリを使用してデータにアクセスする方法

ホットタグ

アーカイブ