有许多方法可以展开嵌套列表。这里仅提供一种解决方案供参考:
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
数组的形状。
flatten
函数以保留列表的结构信息和其中数组的形状信息。例如,它可以返回除了被展平的L
之外的[[(2, 2)], [(2, 2)], [(2, 2), (3, 2)]]
。然后你将需要相应地切分L_flat
并且对每个切片中的数组进行reshape
。 - jonrsharpearray(L)
将把你的列表构建成一个numpy本地数组,它将保留结构吗?你测试过使用savez处理p×q×N数组的性能吗? - msw