我想创建一个“范数”为1且“均值”为0的随机数组。我可以使用它numpy.random.normal()
来获取我想要的“均值”,但是如何创建一个数组以numpy.linalg.norm(array)
返回所需的数字呢?
numpy.random.normal
与该size
参数一起使用将为您提供一个数组,该数组的值均取自均值为0的分布。但是,数组的平均值不会为0(但是,数组的平均值可能接近于0,是)。
但是您可以通过减去数组的平均值来轻松解决此问题。
一旦有了它,就可以通过除以数组范数来将数组范数更改为1。这不会更改平均值,因为它是0。
def create(n):
x = numpy.random.normal(size=n)
x -= x.mean()
return x / numpy.linalg.norm(x)
>>> a = create(10)
>>> a
array([-0.48299539, 0.06017975, 0.23788747, -0.31949065, 0.56126426,
-0.33117035, 0.40908645, 0.01169836, -0.1008337 , -0.0456262 ])
>>> a.mean()
-1.3183898417423733e-17 # not exactly 0 due to floating-point math
>>> numpy.linalg.norm(a)
1.0
请注意,到底n=2
有两个数组满足以下条件:那些同时包含正负平方根1/2的数组:
>>> for _ in range(5):
... print(create(2))
...
[-0.70710678 0.70710678]
[-0.70710678 0.70710678]
[-0.70710678 0.70710678]
[-0.70710678 0.70710678]
[ 0.70710678 -0.70710678]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句