凹陷的Numpy制服分布

时间:2016-08-08 20:21:33

标签: python numpy

我试图构建一个均匀分布的矩阵,在每行中以相同的速率衰减到0。分布应该介于-1和1之间。我所看到的是构建类似的东西:

[[0.454/exp(0) -0.032/exp(1) 0.641/exp(2)...]
 [-0.234/exp(0) 0.921/exp(1) 0.049/exp(2)...]
 ...
 [0.910/exp(0) 0.003/exp(1) -0.908/exp(2)...]]

我可以使用以下方法构建均匀分布矩阵:

w = np.array([np.random.uniform(-1, 1, 10) for i in range(10)])

并且可以使用for循环来实现所需的结果:

for k in range(len(w)):
    for l in range(len(w[0])):
        w[k][l] = w[k][l]/np.exp(l)

但想知道是否有更好的方法来实现这一目标。

2 个答案:

答案 0 :(得分:6)

您可以使用numpy的广播功能来执行此操作:

w = np.random.uniform(-1, 1, size=(10, 10))
weights = np.exp(np.arange(10))
w /= weights

答案 1 :(得分:1)

Alok Singhal的答案是最好的,但作为另一种方式(或许更明确) 你可以复制向量[exp(0), ...,exp(9)]并通过一个带有向量的外积来将它们全部叠加到矩阵中。然后划分' w'新衰变的矩阵'基质

n=10
w = np.array([np.random.uniform(-1, 1, n) for i in range(n)])
decay = np.outer( np.ones((n,1)), np.exp(np.arange(10)) )
result = w/decay

您还可以使用np.tile从矢量的多个副本中创建矩阵。它完成了与外部产品技巧相同的事情。