私はすぐに配列を作成することができますが、この配列のサイズは事前にわかりません。不明な長さのnumpy配列を初期化する
は、例えば、私はこのような何かをしたい:xの含むすべての要素につながる
a= np.array()
for x in y:
a.append(x)
は、明らかにこれは些細な答えです。これが可能かどうか私はちょうど興味がありますか?
私はすぐに配列を作成することができますが、この配列のサイズは事前にわかりません。不明な長さのnumpy配列を初期化する
は、例えば、私はこのような何かをしたい:xの含むすべての要素につながる
a= np.array()
for x in y:
a.append(x)
は、明らかにこれは些細な答えです。これが可能かどうか私はちょうど興味がありますか?
はPythonのリストを作成し、numpyの配列にそれを変換します。これは、配列への変換のために、付加的なO(1)+ O(n)の時間を費やして、O(n)の合計になります。後世のために
a = []
for x in y:
a.append(x)
a = np.array(a)
それでもいいですね。 'a = np.array([x in x in y])';または単に 'a = np.array(list(y))' –
あなたはこれを行うことができます。
a = np.array([])
for x in y:
a = np.append(a, x)
追加ごとに線形時間がかかります。 –
このアプローチでは、追加するたびに配列をコピーします。これはO(sum(range(n)))です。私のラップトップでは、この方法は@ larsmanの方法よりも42倍遅かったです。larsmansメソッドに続くリストを作成すると、1ループあたり最大3ループ、つまり1.53ミリ秒かかることになります。この方法に従うと、正確には10ループ、3ループ:64.8 ms /ループが必要です。 –
、私はこれが迅速だと思う:
a = np.array([np.array(list()) for _ in y])
あなたも発電機に渡すことができるかもしれない(つまり[] - >())、内側のリストがされた場合にはメモリに完全に格納されることはありません。 yは呼び出しが追加する理由は、私が本当に見ていない反復可能であるので
>>> import numpy as np
>>> y = range(10)
>>> a = np.array([np.array(list) for _ in y])
>>> a
array([array(<type 'list'>, dtype=object),
array(<type 'list'>, dtype=object),
array(<type 'list'>, dtype=object),
array(<type 'list'>, dtype=object),
array(<type 'list'>, dtype=object),
array(<type 'list'>, dtype=object),
array(<type 'list'>, dtype=object),
array(<type 'list'>, dtype=object),
array(<type 'list'>, dtype=object),
array(<type 'list'>, dtype=object)], dtype=object)
a = np.empty(0)
for x in y:
a = np.append(a, x)
:
下記のコメントへの対応
a = np.array(list(y))
を行いますと、それははるかです速い:
import timeit
print timeit.timeit('list(s)', 's=set(x for x in xrange(1000))')
# 23.952975494633154
print timeit.timeit("""li=[]
for x in s: li.append(x)""", 's=set(x for x in xrange(1000))')
# 189.3826994248866
もっと効率的な方法は、大きな配列をいくつか割り当て、容量に達するたびにそのサイズを2倍にすることです。 – wim