0

NumPyでは、値を繰り返す配列を簡単に作成できます。次のように。

>> print np.arange(3).repeat(2)
[0 0 1 1 2 2]

CoffeeScriptでこれを行う方法はありますか?

更新:マリウスが彼の答えで行った提案に従って、私は繰り返し操作を自動化するための簡単な関数を作成しました。これは、将来同じ問題が発生した場合に表示されます。

repeat = (arr, repeats) ->
    newArr = for a in arr
        a for [0...repeats]
    return [].concat.apply [], newArr
4

2 に答える 2

3

直接ではありません。これは地獄のように醜いですが、動作します:

arr = for a in [0..2]
  a for [0..1]

console.log arr
console.log [].concat.apply [], arr

出力:

[ [ 0, 0 ], [ 1, 1 ], [ 2, 2 ] ]
[ 0, 0, 1, 1, 2, 2 ]

最初のブロックはネストされた配列を作成し、concat.apply (javascript) メソッドはそれを平坦化します。

完全を期すために (コメントを参照)、CS の「きれいな」バージョンを次に示しますが、別の種類の配列が作成されることに注意してください (ループを異なる順序で実行します)。

arr = (a for a in [0..2] for [0..1])

console.log arr
console.log [].concat.apply [], arr

出力:

[ [ 0, 1, 2 ], [ 0, 1, 2 ] ]
[ 0, 1, 2, 0, 1, 2 ]

最後の例はコードと直接比較できるものではありませんが、実際に何を達成しようとしているのかによっては、とにかく使用できる場合があります。

CS には好きなことがたくさんありますが、私が嫌いな 2 つの点は、1) 常にブロックに空白を使わなければならないこと (私の最初の例をワンライナーにする方法がない)、および 2) オブジェクトの理解がないこと (これとは関係ありません) です。例)。

于 2013-02-27T09:51:35.457 に答える
2

CoffeeScript は言語自体に関するものです。あなたが探しているのは、ライブラリのサポートです。NumPy ほど包括的なものはなく、まだrepeat()関数もありませんが、少なくともUnderscore.jsには (ある程度) 関連する関数がいくつかあります。レモネードは、いくつかの関連タスクにも有望に見えます。

于 2013-02-27T13:13:58.760 に答える