从 MATLAB 中的确定范围中选择的整数的随机向量



如何创建一个具有从确定范围中提取的特定 # 值的向量? 只要重复是随机发生的,就欢迎重复。

例如,一个包含 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

相关内容

  • 没有找到相关文章

最新更新