Python 带衰减的Numpy均匀分布

Python 带衰减的Numpy均匀分布,python,numpy,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

我试图构造一个均匀分布矩阵,每行以相同的速率衰减到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)

但我想知道是否有更好的方法来实现这一点

Alok Singhal的答案是最好的,但作为另一种方式(也许更明确) 您可以复制向量
[exp(0),…,exp(9)]
,并通过使用1的向量进行外积,将它们全部堆叠到矩阵中。然后将“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
从向量的多个副本创建矩阵。它完成了与外部产品技巧相同的事情

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

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

您可以将元组
(10,10)
作为
uniform
size
参数传递,而无需调用
.reformate(10,10)
。谢谢。我不应该只看签名就假设
size
参数是标量。