Python:用类似的值替换NumPy数组中的每个值
考虑以下随机函数,该函数返回的数字与它接收到的几乎相同(它从高斯分布返回一个样本,平均值Python:用类似的值替换NumPy数组中的每个值,python,numpy,random,Python,Numpy,Random,考虑以下随机函数,该函数返回的数字与它接收到的几乎相同(它从高斯分布返回一个样本,平均值x,标准偏差为0.001*x): 例如: > print(similar(1.0)) 0.99946018 此函数似乎适用于任意形状的阵列: > ones = np.ones(5) > print(similar(ones)) [0.99946018 0.99946018 0.99946018 0.99946018 0.99946018] > example = np.array(
x
,标准偏差为0.001*x
):
例如:
> print(similar(1.0))
0.99946018
此函数似乎适用于任意形状的阵列:
> ones = np.ones(5)
> print(similar(ones))
[0.99946018 0.99946018 0.99946018 0.99946018 0.99946018]
> example = np.array([[[6,7,8,9,10],[-1,-2,-3,-4,-5]],[[1,2,3,4,5], [-2,-1,0,1,2]]])
> print(similar(example))
[[[ 6.00610123 7.0071181 8.00813497 9.00915185 10.01016872]
[-1.00101687 -2.00203374 -3.00305062 -4.00406749 -5.00508436]]
[[ 1.00101687 2.00203374 3.00305062 4.00406749 5.00508436]
[-2.00203374 -1.00101687 0. 1.00101687 2.00203374]]]
然而,正如您可能已经注意到的,它并不是对每个单元格都使用一个新的随机种子。我要找的是一个函数,它对任意形状的NumPy数组的每个单元使用随机性。由于形状可以是任何类型,我认为嵌套的for
-循环是不可用的
另外一个要求是,即使对于形状为(1024,1024)的阵列,该方法也应该工作得相当快。
有没有一种方法可以编写一个执行上述任务的fast(例如通过矢量化)函数
编辑:我不介意更改
相似的定义,也不介意使用不同接口的函数–只要建议符合生成»相似«矩阵的目的。我认为您的相似函数的工作方式与您认为的不同。
函数生成单个随机数*sigma(标量),并将该标量添加到mu==x中的所有单元格中
将np.random.randn更改为输出形状为x的randn矩阵应该可以解决此问题
def similar(x, rel_std=0.001):
sigma = rel_std * x
mu = x
return sigma * np.random.randn(*x.shape) + mu
在x.shape
前面的星号*
的作用是什么?不管我怎么说,我找到了答案
def similar(x, rel_std=0.001):
sigma = rel_std * x
mu = x
return sigma * np.random.randn(*x.shape) + mu