Я читаю в указанных c значениях json файлов, я хочу, чтобы эти (сто тысяч) были в одном массиве, поэтому я подумал о разных возможностях:
из 'A'
Json file 0:[x0,y0,x1,y1,x2,y2,...]
Json file 1:[x0,y0,x1,y1,x2,y2,...]
в 'B'
[[x0,x0,x0,x0,...][y0,y0,y0,....]],[x1,x1,x1,x1,...][y1,y1,y1,....],[]...]
После этого я вычисляю простые операции для каждого массива 'B'.
Чтобы добраться до меня, я подумал о 3 различных подходах:
- Добавить все списки из строки «A» в большой список и транспонировать (добавить строку за строкой легко, но транспонировать дорого)
# read row per row
for key, key2, key3:
dic[key][key2][key3].append(original_frame[key][key2][0::3])
# compute for transposed
for list in dic[key][key2][key3].T.tolist():
compute mean & stdev for list
# takes 6.3 s
Добавить все списки из столбца за столбцом в большой список (добавление по столбцам должно быть сделано al oop перед каждой строкой и добавляться в конце, но без транспонирования)
# read column per column
for key, key2, key3, i:
dic[key][key2][key3][i].append(original_frame[key][key2][0::3][i])
# compute for original list
for list in dic[key][key2][key3]:
compute mean & stdev for list
# takes 7.74 s
Добавить все списки из столбца за столбцом в большой массив np.array с помощью np.c_
# stack np.arrays
for key, key2, key3:
dic[key][key2][key3] = np.c_[dic[key][key2][key3], original_frame[key][key2][0::3]])
# compute for original list
for list in dic[key][key2][key3]:
compute mean & stdev for list
# takes 26.5 s
5 каталогов (ключ), ~ 2000 файлов на каталог (ключ2), 5 ключевых слов (key3), около 150 чисел на ключевое слово (i)
Так что кажется, что добавление строки к строке и транспонирование - это самое быстрое, поэтому я запутался, я ожидал прямо противоположного. Я проверил это прямо сейчас на меньшем наборе данных, поэтому я боюсь, что транспонирование взрывается с большим количеством значений, что вы думаете об этом. Может быть, есть еще одна возможность, о которой я не думал?