如何对NumPy数组切片,将相同索引的元素聚合在一起?
NumPy切片实现按索引聚合重排数组元素
先还原你的数组场景,用NumPy代码生成对应数组:
import numpy as np # 原始item数组 item = np.array([[0, 5], [1, 6], [2, 7], [3, 8], [4, 9]]) # 复制3次得到三维数组arr(shape为(3,5,2)) arr = np.repeat(item[np.newaxis, :, :], 3, axis=0)
要实现按索引聚合a、b元素的需求,直接通过切片+转置就能完成:
# 提取所有a变量并按索引聚合 a = arr[:, :, 0].T # 提取所有b变量并按索引聚合 b = arr[:, :, 1].T
结果验证
打印a会得到:
array([[0, 0, 0], [1, 1, 1], [2, 2, 2], [3, 3, 3], [4, 4, 4]])
打印b会得到:
array([[5, 5, 5], [6, 6, 6], [7, 7, 7], [8, 8, 8], [9, 9, 9]])
切片逻辑说明
arr[:, :, 0]:冒号:表示取对应维度的所有元素,这里取所有复制批次(3次)、所有原始索引(5个)、第3维度的第0个值(即a变量),得到shape为(3,5)的数组.T:转置操作,把(3,5)的数组转为(5,3),正好将每个原始索引的a元素聚合为一行,完全符合你要的a_0到a_4的结构- 处理b变量的逻辑和a完全一致,只是取第3维度的第1个值
arr[:, :, 1]
内容的提问来源于stack exchange,提问作者user18980990
相关产品推荐
相关产品推荐

