0

最近、Python のリスト内包表記を使い始めました。私は彼らに満足していません。リスト内包表記を使用して以下のコードを最適化するにはどうすればよいですか?

heatmap_color = []

for r in xrange(len(heatmap)):
    heatmap_color.append([])
    for c in xrange(len(heatmap[r])):
        heatmap_color[r].append(cmap.to_rgba(heatmap[r][c], alpha=0.5, bytes=True))

このコードが行うことは、2D 配列 (カラー画像のピクセル値を表す) を作成することです。最後の行は、heatmap_color 配列の対応するエントリにこれらを入力できるように、ヒートマップ内の既存のグレースケール ピクセルのそれぞれをアルファ チャネル = 0.5 の色にマッピングします。

現在、実行には 30 秒弱かかります。この時間をできるだけ短縮したい。

ありがとうございました!

4

1 に答える 1

4

ループをネストします。

heatmap_color = [[cmap.to_rgba(r, alpha=0.5, bytes=True) for r in c] for c in heatmap]

xrange()インデックス (によって生成される)を使用する必要がないことに注意してください。代わりに、リストを直接ループします。

map()ここでもandを使用functools.partial()して、もう少し高速化できます。

from functools import partial
heatmap_rgba = partial(cmap.to_rgba, alpha=0.5, bytes=True)
heatmap_color = [map(heatmap_rgba, c) for c in heatmap]

あるいは:

from functools import partial
heatmap_rgba = partial(cmap.to_rgba, alpha=0.5, bytes=True)
heatmap_per_list = partial(map, heatmap_rgba)
heatmap_color = map(heatmap_per_list, heatmap)

リスト内包表記よりも高速になる可能性があるためmap()、特に必要functools.partialになる余分なスタックプッシュを回避するためにwith を使用lambdaすると。

于 2013-07-10T13:20:45.873 に答える