Python:用类似的值替换NumPy数组中的每个值

时间:2018-04-16 14:45:39

标签: python numpy random

考虑以下随机函数,它返回的函数几乎与它收到的数字相同(它返回高斯分布中的样本,均值为D,标准差为0.001 * x):

x

例如:

def similar(x, rel_std=0.001):
    sigma = rel_std * x
    mu = x
    return sigma * np.random.randn() + mu

此函数似乎适用于任意形状的数组:

> print(similar(1.0))
0.99946018

但是,正如您可能已经注意到的那样,它不会为每个单元格使用新的随机种子。我正在寻找的是一个函数,它使用任意形状的NumPy数组的每个单元的随机性。由于形状可能是任何形状,我认为嵌套> 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]]] - 循环不可用。

另一个要求是即使对于形状数组(1024,1024),该方法也应该合理快速地工作。 有没有办法编写快速(例如通过矢量化)功能执行上述任务?

编辑:我不介意改变for的定义,或者使用不同界面的函数 - 只要该建议符合生成“相似”矩阵的目的。

1 个答案:

答案 0 :(得分:1)

我认为你的类似功能并不像你想象的那样有效。 你的函数生成一个随机数* sigma(这是一个标量),并将这个相同的标量添加到mu == x中的所有单元格。

更改np.random.randn以输出形状为x的randn矩阵可以解决问题。

%p