如何创建一个具有从确定范围中提取的特定 # 值的向量? 只要重复是随机发生的,就欢迎重复。
例如,一个包含 5 个值的向量,所有这些值都是介于 1 和 80 之间的整数
ps 我正在使用 2019 版的 Matlab
您可以使用rand
函数;rand
给出一个介于 0 和 1 之间的随机值,但对于范围,您可以使用以下公式。
lowest_val = -10
range = 20 % [-10, 10]
rand_vec = lowest_val + (range)*rand(10,1) % here the range is [-10, 10]
(20)*rand(10,1)
将给出一个介于 0 和 20 之间的随机值,将 -10 加到它,范围变为 -10 到 10。
对于您的情况,您可以使用
lowest_val = 1
range = 79 % [1, 80]
rand_vec = lowest_val + (range)*rand(10,1)
(80)*rand(10,1)
将给出一个介于 0 和 79 之间的随机值,加上 1,范围变为 1 到 80
如果您不想重复,您可以使用randperm
。
取决于它们必须是整数还是可以是"实数"(浮点数(。另外,是否要包含值 1 和 80?
无论如何,这个matlab帮助非常有用。
像通常使用随机数一样,您需要初始化随机生成器。
rng(0,'twister');
这是为了能够重现您的结果,所以请注意,如果您总是使用相同的种子(在本例中为 0(,您将始终获得相同的结果。 随机化的典型技巧是使用当前时间作为种子,
rng(posixtime(datetime('now')),'twister');
鉴于您说您想要一个包含 5 个数字的数组,
N = 5;
rand(N,M)
返回区间(0,1)
中均匀分布数的矩阵NxM
,那么您需要以下变换将它们带到区间(a,b)
(在您的情况下(1,80)
(
a = 1;
b = 80;
r = (b-a).*rand(N,1) + a;
输出:
>> a = 1; b = 80; r = (b-a).*rand(N,1) + a r = 65.5670 69.6269 7.6704 32.5828 21.5298
如果您在区间[1,80]
中查找整数(请注意,现在区间包括值 1 和 80(,那么这将做到这一点,
r = randi(80,N,1);
输出:
>> r = randi(80,N,1) r = 65 35 73 15 22