Добавить столбец в список или добавить строку и транспонировать - PullRequest
0 голосов
/ 03 марта 2020

Я читаю в указанных 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 различных подходах:

  1. Добавить все списки из строки «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)

Так что кажется, что добавление строки к строке и транспонирование - это самое быстрое, поэтому я запутался, я ожидал прямо противоположного. Я проверил это прямо сейчас на меньшем наборе данных, поэтому я боюсь, что транспонирование взрывается с большим количеством значений, что вы думаете об этом. Может быть, есть еще одна возможность, о которой я не думал?

...