Python 带衰减的Numpy均匀分布
我试图构造一个均匀分布矩阵,每行以相同的速率衰减到0。分布应介于-1和1之间。我所看到的是构建类似于: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.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
参数是标量。