Вместо того, неоднократно конкатенации списков в массив, собирать значения в списке, и построить массив только один раз. Это быстрее, и менее склонны к ошибкам:
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])
Заметьте, что это ставит все значения в одном массиве 1d, в отличие от 2d-массива, что и предыдущие методы. Мы можем vstack
пойти 2d (он тоже использует 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
, но я предпочел бы не так. Слишком много плакатов злоупотребляют им.
Что это такое? Не просто покажите код. Покажите результаты и объясните, что не так. – hpaulj