有許多用於拼合嵌套列表的配方。我將複製一個解決方案在這裏僅供參考:拼合並解開numpy數組的嵌套列表
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]
是否有一種有效的扁平化方法,可以節省指標並重建爲原始格式?
請注意,該列表可以是任意深度,並且可能不具有規則形狀,並且將包含不同維度的數組。
當然,flattening函數也應該改變,以存儲列表的結構和numpy
數組的形狀。
你應該從扁平版本中知道它最初的樣子?你在扁平化過程中失去了信息。 – jonrsharpe
當然,應該更改展平功能以存儲列表的結構。 – memecs
某種程度上,你已經回答了你自己的問題;你需要修改'flatten'來提供關於列表結構和其中數組形狀的保留信息。例如,它可以在平展的「L」旁邊返回'[[(2,2)],[(2,2)],[(2,2),(3,2)]]''。然後,您將不得不相應地切分「L_flat」並對每個切片的陣列進行「重塑」。 – jonrsharpe