リストの長さと配列のサイズが同じであれば、numpy配列のリストを1つの配列にマージする最も速い方法すべてのために? Pythonic way to create a numpy array from a list of numpy arraysからnumpy配列のリストを1つの配列にマージする(高速)
merged_array = array(list_of_arrays)
とvstack
Aあなたはvstack
が高速である見ることができますが、何らかの理由で最初の実行が3を取ります
vstack
の配列をどのように事前に割り当てるのですか?それとももっと速い方法を知っていますか?
ありがとうございます!
[UPDATE]
私は、私のためにmerged_array = array(list_of_arrays)
文句を言わない作業を意味(25280, 320)
ない(80, 320, 320)
れたいです。それを指摘してくれてありがとうJoris!
出力:
0.547468900681 s merged_array = array(first_list_of_arrays)
0.547191858292 s merged_array = array(second_list_of_arrays)
0.656183958054 s vstack first
0.236850976944 s vstack second
コード:
import numpy
import time
width = 320
height = 320
n_matrices=80
secondmatrices = list()
for i in range(n_matrices):
temp = numpy.random.rand(height, width).astype(numpy.float32)
secondmatrices.append(numpy.round(temp*9))
firstmatrices = list()
for i in range(n_matrices):
temp = numpy.random.rand(height, width).astype(numpy.float32)
firstmatrices.append(numpy.round(temp*9))
t1 = time.time()
first1=numpy.array(firstmatrices)
print time.time() - t1, "s merged_array = array(first_list_of_arrays)"
t1 = time.time()
second1=numpy.array(secondmatrices)
print time.time() - t1, "s merged_array = array(second_list_of_arrays)"
t1 = time.time()
first2 = firstmatrices.pop()
for i in range(len(firstmatrices)):
first2 = numpy.vstack((firstmatrices.pop(),first2))
print time.time() - t1, "s vstack first"
t1 = time.time()
second2 = secondmatrices.pop()
for i in range(len(secondmatrices)):
second2 = numpy.vstack((secondmatrices.pop(),second2))
print time.time() - t1, "s vstack second"
['timeit'](http://docs.python.org/library/timeit.html)を使用して、Pythonで簡単なパフォーマンステストを行います。より正確な結果が得られます。 –
結合された配列にはどのような次元が必要ですか? '' first1''は ''(80、320、320) ''と '' first2''は '(25280,320)' ' – joris
@jorisですので、それを指摘してくれてありがとうございます。私は最初のアプローチだった2番目のものが欲しい。私は質問でそれを変更します。 – Framester