辞書を使用して配列のリストの値を置き換えることにパフォーマンス上の問題があります。配列の大きなリスト(パフォーマンス)の値を置換する
のは、これが私の辞書であるとしましょう:
# Create a sample dictionary
keys = [1, 2, 3, 4]
values = [5, 6, 7, 8]
dictionary = dict(zip(keys, values))
そしてこれは配列の私のリストです:
# import numpy as np
# List of arrays
listvalues = []
arr1 = np.array([1, 3, 2])
arr2 = np.array([1, 1, 2, 4])
arr3 = np.array([4, 3, 2])
listvalues.append(arr1)
listvalues.append(arr2)
listvalues.append(arr3)
listvalues
>[array([1, 3, 2]), array([1, 1, 2, 4]), array([4, 3, 2])]
私はその後、使用のND nummpy配列内のすべての値を交換するには、次の機能を使用します辞書:
# Replace function
def replace(arr, rep_dict):
rep_keys, rep_vals = np.array(list(zip(*sorted(rep_dict.items()))))
idces = np.digitize(arr, rep_keys, right=True)
return rep_vals[idces]
この関数は本当に高速ですが、arのリストを反復処理する必要があります
これは、何千もの配列を反復処理する必要があるため、プロセスのボトルネックです。 for-loopを使用せずに同じ結果を得るにはどうすればよいですか?結果は入力と同じ形式(値が置き換えられた配列のリスト)であることが重要です
多くのありがとうございます!!
をクリアしてください。 listvaluesは可変長の配列の非常に長い配列です。これらの短い配列の長さには自然な上限がありますか? –
基本的には、配列はかなり短いですが、これらの配列またはリストの長さに自然な上限はありません。ほとんどの配列はlen 20より長くはありませんが、これが役に立ちますように! – cf2
あなたのボトルネックは 'replace'関数であり、ループではありません。ループ内で重要なことは何も起こっていないので、ループの置換または並列化のパフォーマンスを向上させる必要があります。 – sirfz