如何用简洁索引实现NumPy数组的循环首尾衔接(无需创建列表)
用NumPy组合索引实现数组循环追加首元素
要实现将NumPy数组末尾追加第一个元素形成循环结构,且不手动创建索引列表,这里提供两种简洁的索引方案:
方案一:利用np.r_自动生成组合索引
np.r_是NumPy中用于快速拼接索引或数组的工具,可以将切片和标量索引组合成所需的索引数组,无需手动枚举:
import numpy as np a = np.asarray([2,4,6]) cycle = a[np.r_[:len(a), 0]]
原理:np.r_[:len(a), 0]会自动生成包含原数组所有索引+首元素索引的数组(比如示例中生成array([0,1,2,0])),通过这个索引数组去取原数组元素,就得到了循环结构的新数组。
方案二:结合np.arange与标量索引
如果不想用np.r_,也可以通过np.arange生成原数组的索引序列,再拼接首元素索引:
cycle = a[np.concatenate([np.arange(len(a)), [0]])]
原理:np.arange(len(a))生成原数组的索引序列([0,1,2]),再通过np.concatenate把首元素索引[0]拼接到末尾,形成完整的索引数组。
这两种方案都不需要手动编写固定长度的索引列表,能适配任意长度的NumPy数组,满足你要求的组合索引类型实现方式。
内容的提问来源于stack exchange,提问作者nikost
相关产品推荐
相关产品推荐

