4

我想生成一个关于轴的所有排列对称的随机(高斯)张量。最后,我希望所有条目具有相同的分布,所以像对所有排列求和和通过 sqrt(k!) 重新缩放这样的技巧,其中 k 是我的张量的顺序,是行不通的。例如:

import numpy as np
from itertools import permutations

noise_buffer = np.random.normal(size=n*n*n).reshape(n,n,n)/np.sqrt(6);
noise = np.zeros([n,n,n]);
for i in permutations([0,1,2]):
    noise += np.transpose(noise_buffer,axes=list(i))

我可以遍历所有坐标 (-1) 并适时重新缩放,但这很耗时。

您知道任何实现此功能的库吗?或者你知道任何快速的实施吗?

4

1 回答 1

0

实际上,您提出的方法有效;它只需要一个小的修改。

使用正态随机变量的总和是另一个方差相加的正态随机变量这一事实,例如,请参见此处

问题似乎在于您希望噪声条目来自某个分布,但是如果您从该分布中获取噪声缓冲区,那么噪声将具有不同的分布。

解决方案是对noise_buffer 使用不同的分布(特别是正态分布,标准差减少1/sqrt(k!) ),然后噪声将具有正确的分布。

于 2022-01-19T02:21:55.110 回答