У меня есть несколько экземпляров класса, содержащего массивы numpy.
import numpy as np
import os.path as osp
class Obj():
def_init__(self, file):
self.file = file
self.data = np.fromfile(file)
self.basename = osp.basename(file)
У меня есть список таких объектов, которые я хочу сгруппировать по форме. Я могу сделать это с помощью сортировки:
obj_list = [obj1, obj2, ..., objn]
obj_list.sort(key=lambda obj: obj.data.shape)
Теперь у меня есть второй список, скажем, obj_list_2:
объекты в obj_list_2 инициализируются из разных файлов, но полученные массивы имеют ту же форму, что и в первом (но не в том же порядке), а также basename s одинаковы.
Для уточнения это файлы, загруженные из разных папок. В каждой папке у меня есть одинаковые файлы, к которым я применил различную предварительную обработку)
Если я сортирую их, используя метод, показанный выше, я могу получить
Я хочу, чтобы два списка были отсортированы по форме, а также выровнены по их basename
Я думал о том, чтобы сначала выполнить сортировку по форме, а затем по 1010 * basename (функции этого типа). Что-то вроде
obj_list.sort(key=lambda obj: obj.data.shape)
obj_list.sort(key=lambda obj: obj.basename)
Однако второй вид может испортить первый. Они должны быть сделаны вместе, так или иначе.
Моя конечная цель - извлечь из двух списков объекты, имеющие одинаковую форму и одинаковое базовое имя
Я пробовал с пандами, но я не настолько знаком с этим.
Сначала я выравниваю их по basename , затем создаю список списков и передаю его пандам.
import pandas as pd
obj_list_of_list = [obj_list1, obj_list2]
obj_df = pd.DataFrame.from_records(obj_list_of_list)
Чего не хватает, так это сгруппировать их по форме и выделить разные группы.