Pythonでの効率的な配列操作

パトリック

私はPythonで、0と1で満たされたかなり大きな配列を作成しようとしています。最終的には約12億のエントリがあるはずです。例のように記入します。背後にある考え方は、400エントリがタイムスロットであり、各タイムスロットに対してそれが1である確率pがあるということです。その場合は、slot_durationタイムスロットのエントリで埋められます。それ以外の場合は、ゼロの400エントリ(1タイムスロット)で埋められます。

import numpy as np

p = 0.01
slot_duration = 10
test_duration = 60
timeslots_left = test_duration * 1000 * 1000 / 20
transmission_array = []
while timeslots_left >= 0:
    rand_num = np.random.choice((0, 1), p=[1 - p, p])
    if rand_num == 1:
        for i in range(0, slot_duration):
            for j in range(0, 400):
                transmission_array.append(1)
        timeslots_left -= slot_duration
    else:
        for j in range(0, 400):
            transmission_array.append(0)
        timeslots_left -= 1

もちろんパフォーマンスはひどいです。10の期間、配列を生成するのに約45秒かかりますが、それを繰り返すだけでも45秒かかります。

私の質問は、それを行うためのよりパフォーマンスの高い方法があるかどうかです。ゼロを含む固定長の配列を初期化してから、値を1に再割り当てする方がよいでしょうか。それとも、それを繰り返すのに同じ時間がかかる場合、それは役に立ちませんか?

私はどんな提案にもオープンです。

Jean-Francois Fabre

十分なメモリがある場合は、そのループを置き換えることができます。

    for i in range(0, slot_duration):
        for j in range(0, 400):
            transmission_array.append(1)

沿って

transmission_array.extend([1]*400*slot_duration)

Cコンパイルされた1つの命令を実行し、すべてのサイズ変更なしで、リストを1回で拡張します。このように、二重ループを回避し、内部で実行するサイズ変更/メモリコピーを大幅に削減します。

そして、slot_durationが定数の場合、次のように宣言できます。

chunk = [1]*400*slot_duration

起動時にできるので transmission_array.extend(chunk)

したがってchunk、各反復での割り当てを回避しています

ここで同じ問題、同じ修正:

    for j in range(0, 400):
        transmission_array.append(0)

になります

    transmission_array.extend(zero_array)

zero_array = [0]*400

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

numpy配列での効率的な行操作

分類Dev

Javascriptでの効率的な文字列操作

分類Dev

numpy配列の任意の列間の(メモリ)効率的な操作

分類Dev

Cでの効率的な配列検索

分類Dev

Malab での行列からの効率的な配列の作成

分類Dev

大規模で複雑な numpy 配列を効率的に操作する方法は?

分類Dev

Pythonで2D配列を埋める効率的な方法

分類Dev

Pythonでnp配列を使用して多次元を効率的に操作する方法は?

分類Dev

この配列をnumpyで構築する効率的な方法は?

分類Dev

配列を減算するための高速で効率的な方法

分類Dev

効率的な方法で配列の要素を見つける

分類Dev

配列リストの最も効率的で迅速な検索

分類Dev

非単調配列での効率的なNumpy検索

分類Dev

配列内の配列を見つける効率的な方法は何ですか?

分類Dev

Pythonでの大きな2D配列の効率的な再グリッド化

分類Dev

PHPで配列と連想配列を使用して配列の配列を作成する効率的な方法

分類Dev

`numpy`配列のインデックスビューで配列操作の効率を向上させる方法は?

分類Dev

numpyでの効率的な配列作成

分類Dev

ネストされた配列内の文字列のPython効率的な置換

分類Dev

Pythonで文字列をctypes.c_ubyte配列に変換する効率的な方法

分類Dev

SQLでの部分文字列の効率的な検索[Python / SQLite]

分類Dev

Pythonでjsonオブジェクトのjson配列をフィルタリングする効率的な方法

分類Dev

Pythonのメモリ効率の良い大規模なnumpy配列

分類Dev

Pythonで効率的な辞書内の並列リスト

分類Dev

Pythonで配列を永続メモリに保存する効率的な方法

分類Dev

Javaでの効率的なマルチスレッド配列の構築

分類Dev

Javaで0と1のみの配列を格納する効率的な方法

分類Dev

Scalaでの効率的な文字列連結

分類Dev

Python、dictを使用した効率的な並列操作

Related 関連記事

  1. 1

    numpy配列での効率的な行操作

  2. 2

    Javascriptでの効率的な文字列操作

  3. 3

    numpy配列の任意の列間の(メモリ)効率的な操作

  4. 4

    Cでの効率的な配列検索

  5. 5

    Malab での行列からの効率的な配列の作成

  6. 6

    大規模で複雑な numpy 配列を効率的に操作する方法は?

  7. 7

    Pythonで2D配列を埋める効率的な方法

  8. 8

    Pythonでnp配列を使用して多次元を効率的に操作する方法は?

  9. 9

    この配列をnumpyで構築する効率的な方法は?

  10. 10

    配列を減算するための高速で効率的な方法

  11. 11

    効率的な方法で配列の要素を見つける

  12. 12

    配列リストの最も効率的で迅速な検索

  13. 13

    非単調配列での効率的なNumpy検索

  14. 14

    配列内の配列を見つける効率的な方法は何ですか?

  15. 15

    Pythonでの大きな2D配列の効率的な再グリッド化

  16. 16

    PHPで配列と連想配列を使用して配列の配列を作成する効率的な方法

  17. 17

    `numpy`配列のインデックスビューで配列操作の効率を向上させる方法は?

  18. 18

    numpyでの効率的な配列作成

  19. 19

    ネストされた配列内の文字列のPython効率的な置換

  20. 20

    Pythonで文字列をctypes.c_ubyte配列に変換する効率的な方法

  21. 21

    SQLでの部分文字列の効率的な検索[Python / SQLite]

  22. 22

    Pythonでjsonオブジェクトのjson配列をフィルタリングする効率的な方法

  23. 23

    Pythonのメモリ効率の良い大規模なnumpy配列

  24. 24

    Pythonで効率的な辞書内の並列リスト

  25. 25

    Pythonで配列を永続メモリに保存する効率的な方法

  26. 26

    Javaでの効率的なマルチスレッド配列の構築

  27. 27

    Javaで0と1のみの配列を格納する効率的な方法

  28. 28

    Scalaでの効率的な文字列連結

  29. 29

    Python、dictを使用した効率的な並列操作

ホットタグ

アーカイブ