如何用NumPy高效移除深度嵌套数组的冗余层级?
NumPy深度嵌套数组降维方法
先明确你的需求:把一个深度嵌套的数组(示例如下)
array = [ [ [ [ "data . . . "], ] ], [ [ ["more data . . ."], ] ] ]
转换成层级更浅的结构:
array = [ [ "data . . . "], ["more data . . ."] ]
下面分两种场景给出实现方法:
如果你用的是Python嵌套列表
你已经写出的列表推导式就很高效:
a_flat = [ row[0][0] for row in array ]
要是想更简洁,也可以借助operator.itemgetter:
from operator import itemgetter get_item = itemgetter(0, 0) a_flat = [get_item(row) for row in array]
如果你用的是真正的NumPy数组
假设你的数据已经是numpy.ndarray类型(比如用np.array()把上面的列表转成NumPy数组),可以用这些矢量化的高效方法:
方法1:直接索引切片
利用NumPy的多维索引特性,直接定位到需要的层级:
import numpy as np arr = np.array(array) a_flat = arr[:, 0, 0]
这个操作是NumPy原生矢量化实现,数据量越大,比列表推导式的效率优势越明显。
方法2:用squeeze()移除单维度
如果要去掉的层级都是长度为1的维度,可以指定维度移除:
# 先看原数组形状:arr.shape 输出 (2, 1, 1, 1) a_flat = arr.squeeze(axis=(1, 2)) # 处理后形状为 (2, 1),和目标结构一致
方法3:用reshape()重塑形状
如果明确知道目标数组的形状,直接重塑即可:
a_flat = arr.reshape(2, 1)
内容的提问来源于stack exchange,提问作者Guy Eric Matz
相关产品推荐
相关产品推荐

