有许多用于拼合嵌套列表的配方。我将复制一个解决方案在这里仅供参考:拼合并解开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