如何将一维ndarray转换为含元素连续递增序列的二维ndarray
解决方法
你可以利用Numpy的广播机制快速生成目标二维数组,具体实现步骤如下:
完整代码示例
import numpy as np # 你的原始数组 idxs = np.array([1, 2, 7, 8, 5, 9, 3, 4, 6, 0]) # 将一维数组转为列向量 idxs_col = idxs.reshape(-1, 1) # 生成0到4的步长数组,对应每个元素需要递增的次数 steps = np.arange(5) # 利用广播完成元素级相加,直接得到目标二维数组 result = idxs_col + steps print(result)
输出结果
array([[ 1, 2, 3, 4, 5], [ 2, 3, 4, 5, 6], [ 7, 8, 9, 10, 11], [ 8, 9, 10, 11, 12], [ 5, 6, 7, 8, 9], [ 9, 10, 11, 12, 13], [ 3, 4, 5, 6, 7], [ 4, 5, 6, 7, 8], [ 6, 7, 8, 9, 10], [ 0, 1, 2, 3, 4]])
核心原理
Numpy的广播规则会自动处理形状兼容的数组运算:
idxs_col形状为(10,1),steps形状为(5,)- 广播会将
steps扩展为(1,5),再将两个数组统一扩展为(10,5)的形状,随后逐元素相加,恰好生成每个原始元素后续4个递增元素的序列
内容的提问来源于stack exchange,提问作者Jackdaw
相关产品推荐
相关产品推荐

