如何将一维NumPy数组的元素重复N次生成指定二维数组?
实现一维数组转每个元素重复N列的二维数组
这其实是个挺常见的数组变形需求,咱分两种场景给你说具体实现方式:
1. 如果你用的是普通Python列表
假设你的原始数组是普通列表,N是你想要重复的列数,直接用列表推导式就能搞定,简洁又直观:
# 原始一维数组 original_arr = [9.975, 9.976, 9.977, 9.978, 9.979, 9.98, 9.981, 9.982, 9.983, 9.984, 9.985, 9.986, 9.987, 9.988, 9.989, 9.99, 9.991, 9.992, 9.993, 9.994] # 要重复的列数 N = 3 # 生成目标二维数组 result_arr = [[num] * N for num in original_arr]
原理很简单:[num] * N会把单个元素复制N次生成一个子列表,外层的列表推导式遍历原始数组的每一个元素,把每个元素对应的子列表收集起来,就是你要的二维数组。
2. 如果你用的是NumPy数组(看你给出的格式很像)
如果是处理NumPy数组,用NumPy自带的方法会更高效,尤其是数组规模比较大的时候,给你两种常用方法:
方法一:用repeat + reshape
import numpy as np # 原始NumPy一维数组 original_np_arr = np.array([9.975, 9.976, 9.977, 9.978, 9.979, 9.98, 9.981, 9.982, 9.983, 9.984, 9.985, 9.986, 9.987, 9.988, 9.989, 9.99, 9.991, 9.992, 9.993, 9.994]) N = 3 # 先把每个元素重复N次,再重塑成每行N个元素的二维数组 result_np_arr = original_np_arr.repeat(N).reshape(-1, N)
方法二:用tile + 维度扩展
import numpy as np original_np_arr = np.array([9.975, 9.976, 9.977, 9.978, 9.979, 9.98, 9.981, 9.982, 9.983, 9.984, 9.985, 9.986, 9.987, 9.988, 9.989, 9.99, 9.991, 9.992, 9.993, 9.994]) N = 3 # 先把一维数组转成列向量,再在列方向上重复N次 result_np_arr = np.tile(original_np_arr[:, np.newaxis], (1, N))
这两种方法都能快速得到你想要的二维数组,其中reshape(-1, N)里的-1表示让NumPy自动计算行数,不用手动算,非常方便。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

