加到 100 的随机数:Matlab

2024-06-21

[我将人口数量分成不同的矩阵,现在想使用随机数测试我的代码。]

快速提问,谢谢你们提前的帮助 -

如果我使用;

 100*rand(9,1)

使这 9 个数字相加等于 100 的最佳方法是什么?

我想要 9 个 0 到 100 之间的随机数,加起来为 100。

是否有内置命令可以执行此操作,因为我似乎找不到它。


我经常看到这个错误,建议要生成具有给定总和的随机数,只需使用统一的随机集,然后对它们进行缩放。但如果这样做的话,结果真的是均匀随机的吗?

在二维中尝试这个简单的测试。生成一个巨大的随机样本,然后将它们缩放到总和为 1。我将使用 bsxfun 进行缩放。

xy = rand(10000000,2);
xy = bsxfun(@times,xy,1./sum(xy,2));
hist(xy(:,1),100)

如果它们确实是均匀随机的,那么 x 坐标将是均匀的,y 坐标也是如此。任何值都同样可能发生。实际上,要使两个点之和为 1,它们必须位于 (x,y) 平面中连接两点 (0,1)、(1,0) 的直线。为了使点一致,沿该线的任何点都必须具有相同的可能性。

当我使用缩放解决方案时,显然均匀性失败。该线上的任何点的可能性都不相同。我们可以看到同样的事情在 3 维空间中发生。请注意,在此处的 3 维图中,三角形区域中心的点更加密集。这是不均匀性的反映。

xyz = rand(10000,3);
xyz = bsxfun(@times,xyz,1./sum(xyz,2));
plot3(xyz(:,1),xyz(:,2),xyz(:,3),'.')
view(70,35)
box on
grid on

简单的扩展解决方案再次失败。它根本不会在感兴趣的领域产生真正统一的结果。

我们可以做得更好吗?嗯,是。二维中的一个简单解决方案是生成一个随机数,该随机数指定沿连接点 (0,1) 和 1,0) 的直线的距离。

t = rand(10000000,1);
xy = t*[0 1] + (1-t)*[1 0];
hist(xy(:,1),100)

可以证明,单位正方形中沿方程 x+y = 1 定义的直线上的任何点现在都同样可能被选择。漂亮、平坦的直方图反映了这一点。

David Schwartz 提出的排序技巧在 n 维中有效吗?显然它是在 2 维中这样做的,下图表明它是在 3 维中这样做的。如果不深入思考这个问题,我相信它在 n 维上适用于这个基本案例。

n = 10000;
uv = [zeros(n,1),sort(rand(n,2),2),ones(n,1)];
xyz = diff(uv,[],2);

plot3(xyz(:,1),xyz(:,2),xyz(:,3),'.')
box on
grid on
view(70,35)

还可以下载该功能兰特固定总和 http://www.mathworks.com/matlabcentral/fileexchange/9700-random-vectors-with-fixed-sum从文件交换来看,罗杰·斯塔福德的贡献。这是一个更通用的解决方案,可以在单位超立方体中生成真正均匀的随机集,具有任何给定的固定总和。因此,为了生成位于单位 3 立方体中的随机点集,受到约束,它们的总和为 1.25...

xyz = randfixedsum(3,10000,1.25,0,1)';
plot3(xyz(:,1),xyz(:,2),xyz(:,3),'.')
view(70,35)
box on
grid on
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

加到 100 的随机数:Matlab 的相关文章

  • 以线程安全的方式获取随机数

    这是一篇描述随机数线程安全性的好文章 以线程安全的方式获取随机数 http blogs msdn com b pfxteam archive 2009 02 19 9434171 aspx 但我坚持使用 RandomGen2 示例 publ
  • MATLAB 类的 Description 和DetailedDescription 属性

    内置 MATLAB 类具有 Description 和 DetailedDescription 属性的值 gt gt handle ans meta class handle Package meta Properties Name han
  • 如何在 MATLAB 中绘制纹理映射三角形?

    我有一个三角形 u v 图像中的坐标 我想在 3D 坐标处绘制这个三角形 X Y Z 与图像中的三角形进行纹理映射 Here u v X Y Z都是具有三个元素的向量 代表三角形的三个角 我有一个非常丑陋 缓慢且令人不满意的解决方案 其中我
  • 从动态 Java 类路径导入 Java 类时出现 Matlab 编译器 MCC 错误

    我怎样才能得到mcc识别来自用户提供的 Java 库的导入 还是简单地忽略无法解析的导入 我有一个使用 Matlab 编译器构建的 Matlab 代码库 但构建正在中断 因为mcc遇到的时候会报错importMatlab 动态类路径上的 J
  • MYSQL从每个类别中随机选择一条记录

    我有一个数据库Items表看起来像这样 id name category int 有几十万条记录 每个item可以是 7 种不同的之一categories 对应于categories table id category 我想要一个从每个类别
  • 在 C++ 中使用 matlab 结构(matlab 函数调用的返回值)(由 matlab 编译器生成的库)

    你好 我有一个相当简单的 matlab 函数 例如 function MYSTRUCT myfunc MYSTRUCT prop1 test MYSTRUCT prop2 foo MYSTRUCT prop3 42 end 我用 matla
  • 读出 Matlab / Octave fft2() 函数输出的特定点

    我正在熟悉 Octave 及其功能fft2 在此玩具示例中 我的目标是生成以下 256 x 256 png 图像的 2D DFT 为了能够轻松理解输出 我尝试将此图像转换为 256 x 256 图像 消除颜色信息 Im imread cir
  • 将 Matlab 的 datenum 格式转换为 Python

    我刚刚开始从 Matlab 迁移到 Python 2 7 在读取 mat 文件时遇到一些问题 时间信息以 Matlab 的日期数字格式存储 对于那些不熟悉它的人 日期序列号将日历日期表示为自固定基准日期以来已经过去的天数 在 MATLAB
  • 加到 100 的随机数:Matlab

    我将人口数量分成不同的矩阵 现在想使用随机数测试我的代码 快速提问 谢谢你们提前的帮助 如果我使用 100 rand 9 1 使这 9 个数字相加等于 100 的最佳方法是什么 我想要 9 个 0 到 100 之间的随机数 加起来为 100
  • 在不知道大小的情况下在Matlab中预分配空间?

    我正在构建一个向量X在 Matlab 中 通过将循环过程中每次迭代的结果连接起来 我现在正在做的是 X for j 1 N do something that delivers a vector A X X A end 不可能先验地预测 A
  • 小矩阵乘以大矩阵

    我试图将小矩阵 假设为 2x2 中的每个元素与大矩阵 假设为 4x4 中的每个位置逐个元素相乘 所以我想要 1 2 3 4 1 0 3 0 1 0 1 2 3 4 0 0 0 0 0 0 x 1 2 3 4 1 0 3 0 1 2 3 4
  • SQL Server 列的默认随机 10 个字符串值

    我有一个专栏rndm在我的桌子上 客人 现在 对于领域Default value or Binding对于表 每当插入新行时 我想自动将 10 个字符的随机字符串插入到该列中作为默认值 该随机字符串不能包含特殊字符 只能包含以下字符a zA
  • C#/Java 数字随机化

    NET 是否可以模仿 Java 使用的精确随机化 我有一个种子 我希望在创建随机数时能够在 C 和 Java 中收到相同的结果 您不需要阅读源代码 该公式是一个单行公式 在以下公式中给出的文档java util Random http ja
  • 四边形到矩形变换

    我想将四边形图像转换为我知道这些顶点的矩形图像 例如 在下图中 我知道坐标 X1 Y1 X4 Y4 和 x1 y1 x2 y2 并且我想将其转换为矩形 如何获得与四边形图像中的 X Y 坐标相对应的矩形图像中的 x y 坐标 gt Y gt
  • 我可以像在 C++ 中那样在 R 中拥有多个独立的随机数生成器吗?

    我有许多独立的随机过程 比如到达过程 需要我生成随机数 我想对每个进程使用通用随机数 以便在控制这些策略时比较不同策略的执行情况 我希望进程 A 由生成器 A 控制 使用种子 A 我希望进程 B 由生成器 B 控制 使用种子 B 等等 这可
  • 在Matlab中,如何改变轴方向?

    我一直在 Matlab 中编写一个脚本来绘制 3D 图像 方法是使用plot3 轴在此区间内运行 x 1 gt 0 y 0 01 gt 0 z 0 gt 1 结果如下图所示 现在我想更改轴的方向 并使用此轴方向重新绘制图形 x 0 gt 1
  • 此代码中 Matlab 与 C++ 速度比较

    我编写了简单的 C 代码并在 C 中对其进行了测试 然后我通过以下方式为 MATLAB 调整了相同的代码mex file name cpp并在 MATLAB 中运行相同的代码 该代码使用与 C 相同的编译器 这是代码 int k for i
  • MATLAB 的函数 imfill() 导致错误

    我有一个二进制图像 720x1280 逻辑 其中有一些漏洞 所以我使用imfill来填充它 但是操作失败并且出现以下错误 Undefined function or variable eml assert all constant Erro
  • MATLAB - 避免循环基于其他向量的元素创建矩阵

    假设我有向量x y z 长度n m l 我想创建一个细胞矩阵Q使用这些向量的元素 天真的人们可以像这样使用 for 循环 for i 1 n for j 1 m for k 1 l Q i j k someFunction x i y j
  • 如何使用 Mikolajczyk 的特征检测器/描述符评估框架?

    我正在尝试使用事实上的标准评估我的 SURF 描述符实现的正确性Mikolajczyk 等人的框架 阿尔 http www robots ox ac uk vgg research affine 我使用 OpenCV 来检测和描述 SURF

随机推荐