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