У меня есть массив пустых массивов (я был бы рад поработать со списком пустых массивов), и я хочу отредактировать весь массив.В частности, я проверяю, разделяют ли массивы (в пределах большего массива) значения, и если они это делают, я удаляю общие значения из меньшего массива.
Проблема, с которой я сталкиваюсь, заключается в том, что при попытке переустановитьизмененные массивы во весь охватывающий массив, окончательный вывод после завершения цикла while не запоминает обновленные модули.
Я считаю, что это как-то связано с нюансами питонов элементов копирования / просмотра, и это когдаЯ обращаюсь к элементу i или j всего массива, я создаю новый объект в цикле while, а не редактирую элемент внутри большего массива.Тем не менее, я рад признать, что не до конца понимаю это и окончательно не могу придумать альтернативу, несмотря на несколько часов попыток.
#Feature_Modules is an array (or list) of number arrays, each containing a set of integers
i = 0
j = 0
while i < Feature_Modules.shape[0]: # Check element i against every other element j
if i != j:
Ref_Module = Feature_Modules[i]
while j < Feature_Modules.shape[0]:
if i != j:
Query_Module = Feature_Modules[j]
if np.array_equal(np.sort(Ref_Module),np.sort(Query_Module)) == 1: # If modules contain exactly the same integers, delete one of this. This bit actually works and is outputted at the end.
Feature_Modules = np.delete(Feature_Modules,j)
Shared_Features = np.intersect1d(Ref_Module, Query_Module)
if Shared_Features.shape[0] > 0 and np.array_equal(np.sort(Ref_Module),np.sort(Query_Module)) == 0: # If the modules share elements, remove the shared elements from the smaller module. This is the bit that isn't outputted in the final Feature_Modules object.
Module_Cardinalities = np.array([Ref_Module.shape[0],Query_Module.shape[0]])
Smaller_Group = np.where(Module_Cardinalities == np.min(Module_Cardinalities))[0][0]
New_Groups = np.array([Ref_Module,Query_Module])
New_Groups[Smaller_Group] = np.delete(New_Groups[Smaller_Group],np.where(np.isin(New_Groups[Smaller_Group],Shared_Features) == 1))
Feature_Modules = Feature_Modules.copy()
Feature_Modules[i] = New_Groups[0] # Replace the current module of Feature_Modules with the new module (Isn't outputted at end of while loops)
Feature_Modules[j] = New_Groups[1] # Replace the current module of Feature_Modules with the new module (Isn't outputted at end of while loops)
else:
j = j + 1
else:
j = j + 1
else:
i = i + 1
i = i + 1
Так что, если мы используем этот небольшой набор данных в качестве примера,
Feature_Modules = np.array([np.array([1,2,3,4,5,6,7,8]),np.array([9,10,1,2,3,4]), np.array([20,21,22,23])])
Новый Feature_Modules должен быть;
Feature_Modules = np.array([np.array([1,2,3,4,5,6,7,8]), np.array([9,10]), np.array([20,21,22,23])])
, поскольку общие значения в массивах [0] и [1] были удалены из [1], так как он был меньшемассив.