Python 如何向数组的每个值添加随机数

Python 如何向数组的每个值添加随机数,python,arrays,numpy,random,Python,Arrays,Numpy,Random,我想知道如何将给定范围内的随机数添加到数组的每个值中 我有一个由1000个值组成的数组,当绘制该数组时,会得到一条S曲线 问题是,我想给这条曲线添加噪声,这就是为什么我想给数组的值添加一个随机数,每个值都会改变 我目前的代码是: import numpy as np import matplotlib.pyplot as plt import random def sigmoid(z): return 1/(1+np.exp(-z)) n=random.randint(-0.1,0.

我想知道如何将给定范围内的随机数添加到数组的每个值中

我有一个由1000个值组成的数组,当绘制该数组时,会得到一条S曲线

问题是,我想给这条曲线添加噪声,这就是为什么我想给数组的值添加一个随机数,每个值都会改变

我目前的代码是:

import numpy as np
import matplotlib.pyplot as plt
import random

def sigmoid(z):
    return 1/(1+np.exp(-z))

n=random.randint(-0.1,0.1)
y = np.arange(-5, 5, 0.01)
print(y)

for i in range(0,1000):
    y[i]=y[i]+n
    i=i+1
    
plt.plot(y, sigmoid(y), marker='x')
plt.show()
但是出现了这个错误:“randrange()的非整数arg 1”


你知道如何解决这个问题吗?

函数
random.randint(a,b)
只接受范围值
a
b
的整数输入,并将返回一个随机整数N:a函数
random.randint(a,b)
仅接受范围值
a
b
的整数输入,并将返回一个随机整数N:a问题在于
randrange()
将int作为参数,并给出一个int。我的方法并不顺利,但至少可以给你一个想法。例如,不要将范围放在范围1,10之间,而是将其设置为1001000,这样你可以使用
randrange()
选择一个随机整数,然后你可以格式化它并将其除以,得到一个介于(0,1)之间的小数字.

问题是
randrange()
将int作为参数,并给出一个int。我的方法并不顺利,但至少可以给你一个想法。例如,不要将range放在范围1,10之间,而是将其设为1001000,这样你就可以用
randrange()选择一个随机整数
然后您可以对其进行格式化并进行除法,得到一个介于(0,1)之间的小数字。

我会按照@abe的建议,从
随机
切换到
numpy
库来生成随机噪声

从1.17版开始,建议使用类生成从
numpy
中的均匀分布中提取的样本(关于这一点,您可以找到一个很好的答案)。 特别是,该类的类从半开区间上的均匀分布中提取样本,其极值可以在输入中提供。例如,在这种情况下:

rng=np.random.default_rng()#构造一个新的生成器
n=rng.均匀(-.1,.1,(10,)#sigmoid每个值的噪声,独立于[1;1]中的均匀分布提取
此外,
rng.uniform
在输入中接受输出形状(
(10,)
在前面的代码中)

从你的问题来看,似乎你想在S曲线上添加一些从[-0.1,0.1)中均匀分布中提取的噪声,因此,我可能会将你的代码重写如下:

将numpy导入为np
将matplotlib.pyplot作为plt导入
def乙状结肠(z):
返回1/(1+np.exp(-z))
x=np.arange(-5,5,0.01)#x值
rng=np.random.default_rng()#获取默认的随机生成器
n=rng.均匀(-.1.1,x.形状)#sigmoid每个值的噪声
y=S形(x)+n#S曲线加上噪声
plt.plot(x,y,marker='x')
plt.show()

我会按照@abe的建议从
random
切换到
numpy
库来生成随机噪声

从1.17版开始,建议使用类生成从
numpy
中的均匀分布中提取的样本(关于这一点,您可以找到一个很好的答案)。 特别是,此类的样本从半开区间上的均匀分布中提取样本,其极值可在输入中提供。例如,在这种情况下:

rng=np.random.default_rng()#构造一个新的生成器
n=rng.均匀(-.1,.1,(10,)#sigmoid每个值的噪声,独立于[1;1]中的均匀分布提取
此外,
rng.uniform
在输入中接受输出形状(
(10,)
在前面的代码中)

从你的问题来看,似乎你想在S曲线上添加一些从[-0.1,0.1)中均匀分布中提取的噪声,因此,我可能会将你的代码重写如下:

将numpy导入为np
将matplotlib.pyplot作为plt导入
def乙状结肠(z):
返回1/(1+np.exp(-z))
x=np.arange(-5,5,0.01)#x值
rng=np.random.default_rng()#获取默认的随机生成器
n=rng.均匀(-.1.1,x.形状)#sigmoid每个值的噪声
y=S形(x)+n#S曲线加上噪声
plt.plot(x,y,marker='x')
plt.show()