非常に大きなベクトルを作成したいが、そのベクトルの長さはわからない。しかし、リストは実際には約10kになるでしょうが、最大長(約100k)にすることができます。本質的に、私はforループを持っています。その中で、特定の基準が満たされるまで、ベクトルに数値を追加し続けます。これを行うに未知の最終的な長さのNumPy配列に要素を動的に追加する
私の最初の試みは、私は次のように使用するPythonのリスト、としたが、最終的に私は、さらなる処理のために、numpyのアレイに、このリストを変換したい
x = []
for i in range(K):
y = get_list_of_numbers()
x += y
。 a = np.array(x)
を使ってこれを行うと、その配列を作成するのに非常に時間がかかります。
だから、私の第二の溶液は最初から空のnumpyの配列を作成し、私が一緒に行くように、それに要素を追加しました:
x = np.empty([])
for i in range(K):
y = get_list_of_numbers()
np.append(x, y)
しかし、ここでnp.append(x, y)
が処理するのに非常に長い時間がかかります。
私のソリューションはどちらも非常に遅いです。そこには、より速い解決策がありますか?
私が考えることができる唯一の解決策は、巨大なNumPy配列を最大長で作成し、各要素をその配列の適切なスロットに挿入することです。しかし、私は実際には最大ベクトル長さの良い推定値を持っていないので、これは非常にメモリ非効率的です...
ありがとう!
初期化/空になり、最後にスライスします。 – Divakar
あなたの 'np.append'の使用は間違っています - その機能から離れてください。最後の 'np.array'呼び出しに時間がかかっても、リストの追加アプローチは通常最速です。 http://stackoverflow.com/questions/43237035/append-a-numpy-array-to-a-numpy-array-stored-in-a-list – hpaulj
私はDivakarに同意します。 np.zeros(initial_size_guess)で初期配列を作成し、ベクトル(n)に追加した数値の数を記録してから、ベクトルをスライスして最初のn個の要素だけを取ります。 – Alex