我想创建一个具有增量随机步骤的数组,我已经使用了这个简单的代码。
t_inici=(0:10*rand:100);
问题是随机数在步骤之间保持不变。有没有简单的方法可以在每个步骤中更改随机数的种子?
答案 0 :(得分:5)
如果您有一定数量的积分,请说<?xml version="1.0" encoding="UTF-8"?>
<project>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
...
<properties>
...
<log4j2.version>2.8.2</log4j2.version>
...
</properties>
...
</project>
,那么您可以执行以下操作
nPts
此方法始终包含您的终点,nPts = 10; % Could use 'randi' here for random number of points
lims = [0, 10] % Start and end points
x = rand(1, nPts); % Create random numbers
% Sort and scale x to fit your limits and be ordered
x = diff(lims) * ( sort(x) - min(x) ) / diff(minmax(x)) + lims(1)
方法不一定如此。
如果您有一些最大分数,请说0:dx:10
,那么您可以执行以下操作
nPtsMax
这种方法可能较慢,但仍然相当快,更好地代表了你问题中的行为。
答案 1 :(得分:3)
我的第一个方法是生成N-2个样本,其中N是随机的样本量,对它们进行排序,并添加极值:
N=50;
endpoint=100;
initpoint=0;
randsamples=sort(rand(1, N-2)*(endpoint-initpoint)+initpoint);
t_inici=[initpoint randsamples endpoint];
然而不确定如何&#34;均匀随机&#34;这是,因为你是&#34;假装&#34;最后2个数据,包括极值。这会以某种方式扭曲纯粹的随机性(我认为)。如果你不一定对包含极值有兴趣,那么只需删除最后一行并生成N个点。这将确保它们确实是随机的(或者像MATLAB一样随机创建它们)。
答案 2 :(得分:3)
以下是“均匀随机”的替代解决方案
[initpoint,endpoint,coef]=deal(0,100,10);
t_inici(1)=initpoint;
while(t_inici(end)<endpoint)
t_inici(end+1)=t_inici(end)+rand()*coef;
end
t_inici(end)=[];
在我看来,它适合你的未完成步骤,从0开始,但不一定以100结束。
答案 3 :(得分:2)
从您的代码中,您似乎想要一个随机的步骤,每两个条目之间会有所不同。这意味着向量将具有的条目数量是事先未知的。
这样做的方法如下。这与Hunter Jiang's answer类似,但是批量添加条目而不是逐个添加,以减少循环迭代次数。
n
。任何值都可以,但是较大的值将导致更少的迭代,并且可能更有效。n
条目并将它们连接到(临时)结果。代码:
lower_value = 0;
upper_value = 100;
step_scale = 10;
n = 5*(upper_value-lower_value)/step_scale*2; % STEP 1. The number 5 here is arbitrary.
% It's probably more efficient to err with too many than with too few
result = lower_value; % STEP 2
done = false;
while ~done
result = [result result(end)+cumsum(step_scale*rand(1,n))]; % STEP 3. Include
% n new entries
ind_final = find(result>upper_value,1)-1; % STEP 4. Index of first entry exceeding
% upper_value, if any
if ind_final % STEP 5. If non-empty, we're done
result = result(1:ind_final-1);
done = true;
end
end