如何制作带边界的随机点?

时间:2018-02-17 08:01:23

标签: matlab random bounds

我想在下限[lx,ly,lz]和上限[ux,uy,uz]之间制作100个随机三维点。

我使用的代码如下

noPoints = 100;
LB = [lx, ly, lz];
UB = [ux, uy, uz];
repmat(UB-LB,noPoints,1).*rand(noPoints,3) + repmat(LB,noPoints,1);

但是,我刚才知道以下代码

repmat(UB-LB,noPoints,1).*rand(noPoints,3) + LB;

给出相同的结果。 这让我意识到"将行向量添加到矩阵中与将行向量添加到矩阵的每个行向量中相同。" 在这里,我有了新的好奇心。 是否有任何方法可以删除功能" repmat"完全? 实际上,

(UB-LB).*rand(noPoints,3) + LB;

无法正常工作,因为两个操作数的尺寸设置不正确。

是否有快速,简洁的代码在边界约束下制作多个随机点?

1 个答案:

答案 0 :(得分:2)

解决方案:

(UB-LB).*rand(noPoints,3) + LB;
由于隐式扩展,

适用于R2016b及更高版本的MATLAB。

在以前的版本中,您可以使用bsxfun

bsxfun(@times, UB-LB, bsxfun(@plus,rand(noPoints,3) , LB))

从MATLAB R2017b开始,您可以使用rescale

rescale(rand(noPoints,3), LB, UB, 'InputMin', 0, 'InputMax', 1)