如何在numpy数组中插入带小幅数值修改的目标序列
错误原因
- 循环逻辑错误:外层循环遍历
range(9),当i≥3时3*i已经超过长度为9的数组的最大下标,逻辑完全不符合需求,你只需要循环3次生成3组调整后的data即可。 - 赋值逻辑错误:内层循环遍历data的每个元素时,你直接给整个长度为3的切片赋值同一个随机数,导致每组3个元素完全相同,且最后会被data最后一个元素(30)生成的随机数覆盖,才会出现全是30左右的重复值。
- 缺失依赖导入:代码里用了
random.randint但没有导入random模块。
修正代码(循环版本,易理解)
import numpy as np import random data = [10, 20, 30] arr = np.zeros(9, dtype=int) # 直接指定int类型更符合预期 for i in range(3): # 生成3组数据 start_idx = 3 * i for j in range(3): # 每个位置对应data的j位置元素,加-5到5的随机整数 # 若要求差值为开区间(-5,5),用randint(-4,4);若为闭区间[-5,5],改成randint(-5,5)即可 arr[start_idx + j] = data[j] + random.randint(-4, 4) print(arr)
更高效的NumPy向量化版本(无需循环,性能更好)
import numpy as np data = np.array([10,20,30]) # 生成3行3列的随机整数,范围-4到4,和data广播相加后打平为一维数组 arr = (data + np.random.randint(-4, 5, size=(3,3))).ravel() print(arr)
输出示例
array([10, 20, 30, 9, 22, 32, 13, 16, 28])
随机值每次运行会有小幅波动,完全符合差值范围要求。
内容的提问来源于stack exchange,提问作者Vesper
相关产品推荐
相关产品推荐

