これは、これと関連して重複としてマークされました:How do I build a numpy array from a generator?質問。
最高ランクの回答は、fromiter
を使用するとよいでしょうが、この質問の問題は実際には解決していません。
コメントとして、for
ループは最後の計算を除いて何も保存しません。そして彼らはnumpy
でやり遂げることができるmath.pow
計算を不必要に実行します。今のpow
ビットをスキップ
:
In [36]: ll=range(100)
In [53]: a=ll[0:20]
In [54]: b=ll[22:40]
In [55]: c=ll[42:60]
私は1つのアレイにこれらを組み合わせることができ、いくつかの方法があります。まずリストだけ。
In [56]: len(list(itertools.chain(a,b,c)))
Out[56]: 56
そのリストからアレイ
In [57]: np.array(list(itertools.chain(a,b,c)))
Out[57]:
array([ 0, 1, 2, 3, 4, 5,...., 59])
fromiter
は少し速くなります。
In [58]: np.fromiter(itertools.chain(a,b,c),int)
Out[58]:
array([ 0, 1, 2, 3, 4, 5, ... 58, 59])
そうconcatenate
である - それは(デフォルトは平坦である)アレイへの入力を変換し、それらを連結:
In [59]: np.concatenate((a,b,c))
Out[59]:
array([ 0, 1, 2, 3, 4, 5, ... 52, 53, 54,
55, 56, 57, 58, 59])
それは、配列
In [62]: 10**(la/100.)
Out[62]:
array([ 1. , 1.02329299, 1.04712855, 1.07151931, 1.0964782 ,
1.12201845, 1.14815362, 1.17489755, 1.20226443, 1.23026877,
...
3.4673685 , 3.54813389, 3.63078055, 3.71535229, 3.80189396,
3.89045145])
にpow
計算を実行するのは簡単です数字はファイルから読み込まれ、リストp
に存在するため、generatを使用してメモリを節約しようとするのはあまり意味がありませんまたは。 chain
は、フラットリストを作成する方法と同様に便利です。
ファイル内のすべての行のアイテム数が同じ場合は、np.loadtxt
がロードされている可能性があります。結果は2次元配列になります。
すべてのサブリストの長さは80です。各行に81の数字がありますか?最初のものはスキップしていますか?その場合、loadtxt
の配列は(N,81)
の形になりますので、スライス[:, 1:]
で簡単に第1を削除できます。あなたがチェーンのすべてのリスト以来
はあなただけでチェーンなしnp.array
にそれらを通過している可能性が同じ長さです。
np.array((b1, b2, b3, b4, b5, b6))
は、(6,80)
形状のアレイを生成するであろう。 reshape
への必要はありません - あなたが別のものを必要としない限り。
ここでは、 'c'を配列に変換する以外にも多くの問題があります。'for'ループは' b1'から 'b6'を構築していないので、' c'はあなたが望むデータを含んでいません。 numpyに変換するのに最適な時間は、ファイルからデータをロードするときに、プログラムの開始時です。 – user2357112