小编Tha*_*arl的帖子

如何生成总计为0.0的n大小的随机浮点数组?

考虑到我需要一个n大小的矢量,其中每个元素都定义在[-1,1]之间。元素a [i]是由-1 + 2 * rand()生成的浮点数。我需要一种优雅的方法来确保数组元素的总和等于零。

我发现了两种可能的解决方案:

第一个是这个matlab函数https://www.mathworks.com/matlabcentral/fileexchange/9700-random-vectors-with-fixed-sum。它在R中也有一个实现,但是在C上实现它的工作量很大,因为此函数用于2d数组。

此线程在此处提供第二个在C ++中生成具有固定总和的随机值。本质上,这个想法是生成具有正态分布的n个数字,然后用我的总和将它们归一化。(我已经使用python波纹管实现了它),向量总计为1.0。它适用于除零以外的每个和值。

import random as rd

mySum = 1;
randomVector = []
randomSum = 0

for i in range(7):
    randomNumber = -1 + 2*rd.random()
    randomVector.append(randomNumber)
    randomSum  += randomNumber

coef = mySum/randomSum
myNewList = [j * coef for j in randomVector]
newsum = sum(myNewList)
Run Code Online (Sandbox Code Playgroud)

那么,有没有办法使用C或C ++做到这一点?如果您知道已经实现的功能,那就太好了。谢谢。

c c++ arrays random

6
推荐指数
1
解决办法
177
查看次数

标签 统计

arrays ×1

c ×1

c++ ×1

random ×1