在python中生成随机对称张量

sst*_*ev3 5 python random symmetric tensorflow tensor

我想生成一个关于轴的所有排列对称的随机(高斯)张量。最后,我希望所有条目具有相同的分布,因此对所有排列求和并通过 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))
Run Code Online (Sandbox Code Playgroud)

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

您知道有哪个图书馆实现了这一点吗?或者你知道有什么快速实施的方法吗?

Aqu*_*one 0

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

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

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

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