중첩 목록을 병합하는 방법에는 여러 가지가 있습니다.중첩 목록의 배열 축소 및 평탄화
def flatten(x):
result = []
for el in x:
if hasattr(el, "__iter__") and not isinstance(el, basestring):
result.extend(flatten(el))
else:
result.append(el)
return result
내가 관심을 갖는 것은 목록을 원래 형식으로 재구성하는 역 연산입니다. 예 :
L = [[array([[ 24, -134],[ -67, -207]])],
[array([[ 204, -45],[ 99, -118]])],
[array([[ 43, -154],[-122, 168]]), array([[ 33, -110],[ 147, -26],[ -49, -122]])]]
# flattened version
L_flat = [24, -134, -67, -207, 204, -45, 99, -118, 43, -154, -122, 168, 33, -110, 147, -26, -49, -122]
인덱스를 저장하고 원래 형식으로 재구성하는 효율적인 방법이 있습니까?
목록은 임의의 깊이 일 수 있으며 규칙적인 모양이 아니어야하며 치수가 다른 배열이 포함됩니다.
물론 배열의 구조와 numpy
배열의 모양을 저장하기 위해 병합 기능을 변경해야합니다.
평평한 버전에서 원래 어떻게 보 였는지 어떻게 알았습니까? 병합 프로세스에서 정보를 잃어 버렸습니다. – jonrsharpe
목록의 구조를 저장하려면 병합 기능을 변경해야합니다. – memecs
어느 정도까지는 자신의 질문에 대답했습니다. 당신은'flatten'을 수정하여리스트의 구조와 그 안에있는 배열의 형태에 관한 정보를 유지할 필요가 있습니다. 예를 들어,''['(2, 2)], ((2, 2)], [(2, 2), (3,2)]]를 반환 할 수 있습니다. 그런 다음'L_flat'을 적절하게 슬라이스하고 각 슬라이스에서 배열을'다시 형성 '해야합니다. – jonrsharpe