2016-08-01 9 views
2

forループ内で毎回新しいデータセット変数を作成する必要があります。 .appendを使用すると、以下のように動作しません。新しいループごとにそれぞれnumpyの配列型変数の形状である(注)(56、25000)ループごとに新しいnumpy配列データセットを作成する

ps=[1,2,3,4] 

for subj in ps: 

    datapath = '/home/subj%d' % (subj) 

    mydata.append = np.genfromtext(datapath, mydatafile) 

ので、基本的に、私はMYDATAの彼女の4例(56、25000)の形状にそれぞれ必要性、またはそのデータセット変数が作成されます。例えば、mydata1、...、mydata4 ....ただし、.appendはそれを行いません。私は

if ps==1: mydata1 = np.genfromtext(datapath, mydatafile) 

if ps==2: mydata2 = np.genfromtext(datapath, mydatafile) 

などでこれを行うことができますが、私はそれ

感謝をはるかにPSの多くのインスタンスを持っているので、ループにいいだろう!

+0

あなたは「shouldn

最後には、ちょうど

ps = [1,2,3,4] for sub in ps: ... 

は(私は上記のように)として書くことができることを指摘したかったです'append'に割り当てます。これは 'mydata.append(np.genfromtext(datapath、mydatafile))'ですか? –

+1

あなたは@jedwardsの答えで行くことができます。またはnumpyインデックスが必要な場合は、空のnumpy配列を簡単に初期化し、各繰り返しでそれを入力することができます。 'data = numpy.empty(4,56,25000)'のスペースを取得し、各ループ 'data [i-1] = np.genfromtext(datapath、mydatafile)'にスペースを入れます。このメソッドでは、事前にデータセットの長さとデータセットの数を知っておく必要があることに注意してください。 – Bort

答えて

2

それはより多くのコードなしで言うのは難しいですが、.appendは、一般的方法であり、このように呼ばれるべきである。

some_container.append(your_object) 

注意私も空のリストであることをmydataを初期化しています - あなたはドン」 (あなたがすべてではない場合)トン、あなたがそれを初期化する方法を示し、これだけ注意してください:

mydata = [] 
for subj in [1,2,3,4]: 

    datapath = '/home/subj%d' % (subj) 

    mydata.append(np.genfromtext(datapath, mydatafile)) 

その後、mydataはnumpyの配列の4要素のPythonリストになります。

また、numpyのvstack()concatenate()の機能があります。

for sub in [1,2,3,4]: 
    ... 

としても機能:

for sub in range(1,5): 
    ... 

# or 

for sub in range(4): 
    datapath = '/home/subj%d' % (subj + 1) 
    ... 
+2

しかし、ループ内にnumpyのスタック式を入れないでください。リストを収集して一度連結します。 – hpaulj

関連する問題