2016-12-04 13 views
0

なぜすべてのリストを追加していないのですか?Numpy append配列が機能しない

test = {'file1':{'subfile1':[1,2,3],'subfile2':[10,11,12]},'file5':{'subfile1':[4,678,6]},'file2':{'subfile1':[4,78,6]},'file3':{'subfile1':[7,8,9]}} 
testarray = np.array([50,60,70]) 
for file in test.keys(): 
    print(test[file]['subfile1']) 
    subfile1 = np.append(testarray, test[file]['subfile1']) 
print(subfile1) 
+1

は何をしていますか?コードを表示するだけではありません。結果を表示し、何が間違っているか説明してください。 – hpaulj

答えて

0

numpy.append戻り新しいnumpyの配列、あなたのコードは、あなたがそれをtestarrayに新しい値を追加することだと思うことを示しています。配列がインプレースに追加されていない場合は、新しい配列を作成してデータで埋めて、testarraytest[file]['subfile1']の両方をコピーする必要があります。

また、キーをループしたり、これらのキーのいずれかを使用して辞書から値を抽出する必要はありません。

for key, value in test.items(): 
    print(value['subfile1']) 
    ... 
0

よりもむしろ繰り返し配列にリストを連結し、リスト内の値を収集し、一度だけのアレイを構築する:あなたは、キーと値の両方を含む配列が含まれていアイテム、以上のループができます。それは高速で、エラーが少ない傾向:

In [514]: test 
Out[514]: 
{'file1': {'subfile1': [1, 2, 3], 'subfile2': [10, 11, 12]}, 
'file2': {'subfile1': [4, 78, 6]}, 
'file3': {'subfile1': [7, 8, 9]}, 
'file5': {'subfile1': [4, 678, 6]}} 
In [515]: data=[test[f]['subfile1'] for f in test] 
In [516]: data 
Out[516]: [[1, 2, 3], [4, 78, 6], [7, 8, 9], [4, 678, 6]] 
In [517]: np.array(data) 
Out[517]: 
array([[ 1, 2, 3], 
     [ 4, 78, 6], 
     [ 7, 8, 9], 
     [ 4, 678, 6]]) 

あなたは、反復的にリストを作成しなければならない場合:

In [518]: data=[] 
In [519]: for f in test.keys(): 
    ...:  data.append(test[f]['subfile1']) 

をあなたが各ステップで連結できます。

In [521]: testarray=np.array([50,60,70]) 
In [522]: for file in test.keys(): 
    ...:  testarray = np.concatenate((testarray, test[file]['subfile1'])) 
    ...:  
In [523]: testarray 
Out[523]: 
array([ 50, 60, 70, 1, 2, 3, 4, 78, 6, 7, 8, 9, 4, 678, 6]) 

お知らせこのプットを以前のメソッドが行った2次元配列とは対照的に、1つの1次元配列内のすべての値。私たちは012dを行くvstack(それもconcatenateを使用します)。

In [525]: testarray=np.array([50,60,70]) 
In [526]: for file in test.keys(): 
    ...:  testarray = np.vstack((testarray, test[file]['subfile1'])) 
    ...:  
    ...:  
In [527]: testarray 
Out[527]: 
array([[ 50, 60, 70], 
     [ 1, 2, 3], 
     [ 4, 78, 6], 
     [ 7, 8, 9], 
     [ 4, 678, 6]]) 

私もappendでこれを書くことができますが、私はむしろないと思います。あまりにも多くのポスターがそれを悪用します。

関連する問題