def orthogonal(size, sparsity=-1, scale=1, dtype=numpy.float32):
sizeX = size
sizeY = size
if sparsity < 0:
sparsity = sizeY
else:
sparsity = numpy.minimum(sizeY, sparsity)
values = numpy.zeros((sizeX, sizeY), dtype=dtype)
for dx in range(sizeX):
perm = numpy.random.permutation(sizeY)
new_vals = numpy.random.normal(loc=0, scale=scale, size=(sparsity,))
values[dx, perm[:sparsity]] = new_vals
u, s, v = svd(values)
values = u * scale
return values.astype(dtype)
评论列表
文章目录