8

10000:10010大きな 2d numpy 配列が与えられた場合、行の範囲を効率的に削除したいと思います。これを異なる範囲で複数回行う必要があるため、並列化も可能にしたいと考えています。

のようなものを使用するnumpy.delete()と、配列をコピーする必要があり、時間とメモリがかかりすぎるため、効率的ではありません。理想的には、ビューを作成するようなことをしたいのですが、この場合、どうすればよいかわかりません。マスクされた配列ではダウンストリーム操作がサポートされていないため、マスクされた配列もオプションではありません。

何か案は?

4

3 に答える 3

2

すでにほのめかしたように、削除操作を高速化する良い方法はありません。この種の削除では、データをメモリにコピーする必要があります。@WarrenWeckesser で提案されているように、できることの 1 つは、複数の削除操作を組み合わせて、一度にすべて適用することです。次に例を示します。

ranges = [(10, 20), (25, 30), (50, 100)]
mask = np.ones(len(array), dtype=bool)

# Update the mask with all the rows you want to delete
for start, end in ranges:
    mask[start:stop] = False

# Apply all the changes at once
new_array = array[mask]

これを並列化するのは本当に意味がありません。メモリにコピーしているだけなので、これはとにかくメモリにバインドされ、CPUを追加しても役に立ちません。

于 2013-11-01T02:51:33.480 に答える