如何用Numpy无循环交替合并两个一维数组
用Numpy无循环实现两个一维数组交替合并
假设我们有两个长度相同的一维Numpy数组:
import numpy as np xs1 = np.array([x0, x1, x2, x3, x4, x5, x6, x7, x8]) xs2 = np.array([x00, x01, x02, x03, x04, x05, x06, x07, x08])
需要将它们交替取元素合并为:
xs = np.array([x0, x00, x1, x01, x2, x02, x3, x03, x4, x04, x5, x05, x6, x06, x7, x07, x8, x08])
下面是几种无需for循环的Numpy实现方式:
方法1:列堆叠+扁平化
利用np.column_stack将两个数组按列组合成二维数组,再用flatten()展开为一维:
xs = np.column_stack((xs1, xs2)).flatten()
原理:column_stack会把两个一维数组转换为9行2列的二维数组(每行对应原数组同位置的元素对),扁平化后自然得到交替排列的结果。
方法2:垂直堆叠+按列展开
用np.vstack垂直堆叠数组,再通过ravel('F')按列优先顺序展开:
xs = np.vstack((xs1, xs2)).ravel('F')
原理:vstack生成2行9列的二维数组,ravel('F')会按列遍历元素,依次取第一列的两个元素、第二列的两个元素……最终实现交替合并。
方法3:拼接+重塑+转置+扁平化
先拼接两个数组,再重塑形状后转置,最后扁平化:
xs = np.concatenate((xs1, xs2)).reshape(2, -1).T.flatten()
原理:concatenate先把两个数组合并成一个长度为18的一维数组,reshape(2, -1)将其转为2行9列的二维数组,转置后变成9行2列,扁平化后得到目标顺序。
这些方法都基于Numpy的向量化操作,避免了显式循环,在处理大规模数组时效率远高于循环实现。
内容的提问来源于stack exchange,提问作者Andrei M.
相关产品推荐
相关产品推荐

