Python将多维数组转化为一维数组
Python的NumPy库提供了将多维数组对象numpy.ndarray扁平化为一维数组的numpy.ndarray.flatten()函数。
对于一般的多维数组,可以使用Python的IterTools库进行扁平化。需要注意的是,itertools.chain.from_iterable()只会将数组的维度降低1维(例如,若输入的数组有3个元素,每个元素是由2个1维数组构成的数组,那么执行后将得到1个包含6个元素、每个元素为1维数组的数组)。如果需要进行嵌套的扁平化,或需要处理包含异质元素的数组(例如,数组中的元素可能是数组、也可能是数值),则需要进行递归调用。
import itertools # Checks if a given object is iterable def IsIterable(objTest) -> bool : return hasattr(objTest, "__iter__") #End Function # Flatten arrays with over 1 dimensions to 1D-array # If UseNestedFlattening is set, will flatten all child elements def FlattenArray(arrOrig : array, UseNestedFlattening : bool = False) -> array : if UseNestedFlattening : arrResult = [] # Flatten all child elements for DataElement in arrOrig : if IsIterable(DataElement) : # If current element is iterable, flatten it and add all child elements to flattened array for FlattenedDataElement in FlattenArray(DataElement, True) : arrResult.append(FlattenedDataElement) #Next else : # If current element is not iterable, all it to flattened array directly arrResult.append(DataElement) #End If #Next return arrResult else : return list(itertools.chain.from_iterable(arrOrig)) #End If #End Function
参考资料:
页面版本: 7, 最后编辑于: 19 Mar 2025 09:54