numpy.appendとlist.appendの大きな違い
背景:GPU計算の最適化において、numpy.appendまたはcupy.appendが計算を遅くしていたことに気づいた
list.appendについて
基本的な使い方
code:example
A = []
A.append(4)
A.append(2)
仕組み
listの末尾に新しい要素を追加している
numpy/cupy.appendについて
基本的な使い方
code:example
A = numpy/cupy.array([])
A = numpy/cupy.append(A,4)
A = numpy/cupy.append(A,2)
numpy/cupy.appendではどのcupy配列に追加するかという指定を第一引数でする必要がある!
仕組み
2行目の時点で A = [4]だが、3行目でAに新しい要素である2を加えた新しい配列A'=[4,2]がAになっている
つまり、numpy/cupy.appendは
値を追加するたびに新しい配列を作成し、そこに古い配列をコピーし、新しい要素を追加する
ような流れであるため、追加回数に比例して配列のコピー量が増え計算に時間がかかる