Данные
В настоящее время я работаю с очень большими JSON файлами, отформатированными как таковые
{key: [1000+ * arrays of length 241],
key2: [1000+ * arrays of length 241],
(...repeat 5-8 times...)}
Данные структурированы таким образом, что n ый элемент в массиве каждого ключа принадлежит n -ому объекту. Думайте об этом как о каждой клавише, являющейся дескриптором, таким как «высота» или «давление». И поэтому, чтобы получить «высоту» и «давление» сущности, вы должны получить доступ к индексу сущностей n во всех массивах. Поэтому все массивы ключей имеют одинаковую длину Z
Как вы можете себе представить, работать с этим в целом - боль. Поэтому всякий раз, когда я выполняю какие-либо манипуляции с данными, я возвращаю замаскированный массив длины Z , заполненный 1 и 0. 1 означает, что данные в этом индексе в каждом ключе должны быть сохранены, а 0 означает, что они должны быть опущены)
Проблема
Как только все мои манипуляции с данными были выполнены, мне нужно применить маскированный массив к данным, чтобы вернуть копию исходных данных JSON, но где длина массива каждого ключа Z равна числу единиц в маскированном массиве (если элемент в массив с индексом n равен 0, тогда элемент в индексе n будет удален из всех массивов ключа json и наоборот)
Моя попытка
# mask: masked array
# d: data to apply the mask to
def apply_mask(mask, d):
keys = d.keys()
print(keys)
rem = [] #List of index to remove
for i in range(len(mask)):
if mask[i] == 0:
rem.append(i) #Populate 'rem'
for k in keys:
d[k] = [elem for elem in d[k] if not d[k].index(elem) in rem]
return d
Это работает как задумано, но требует много времени для таких больших JSON данных
Вопрос
Я надеюсь, что все выше было ясно и поможет вам понять мой вопрос:
Существует ли более оптимальный / более быстрый способ применения маскированного массива к данным, как показано выше?
Cheers