MATLAB 在数组中生成随机数字的随机整数
MATLAB generate random integer with random digit in array
第一个问题:
我正在尝试将具有随机数字的随机整数生成到数组中。然而,由于整数的边界值随着 'int8'、'int16'、'int32'、'int64' 和它们的无符号版本而变化,我无法决定我应该使用哪种类型来生成我的简单数组如下。参见:https://www.mathworks.com/help/matlab/ref/intmax.html
当我使用 randi(n, row, column) 时,其中 n 是上限整数值,行是行号,列是列号。但是,这并不能满足我解决问题的目的。那么,我应该使用哪种形式的 "rand" 函数?
A= [2 7 43 556 32 35 3 4566]
第二个问题:
如果我能达到第一个问题的目的,我该如何遍历数组中的每个数字呢?我想逐个数字地检查每个数字。就像在示例数组中一样,它应该首先检查 2、7、4 和 3、5 等等。
如有任何帮助,我们将不胜感激。
要在给定数据类型的整个范围内生成随机数,您可以使用以下方法:
n = int32(0);
type = class(n); % or you can specify it explicitly e.g. 'uint8' directly
randSize = [10 1];
randomArray = randi([intmin(type) intmax(type)],randSize,type);
要遍历数字,您可以使用除法和取模的组合来隔离每个数字。可能不是最优雅的解决方案,但它可以完成工作。我不确定你想如何处理你的特定应用程序的标志,所以我只是使用绝对值忽略它:
for i = abs(randomArray(:))'
numberOfDigits = ceil(log(double(abs(i)+1))/log(10)); % use log 10 to count digits
fprintf('\nisolating every digit for number %i: ',i);
for digitId = numberOfDigits:-1:1
digitFactor = 10^(digitId-1);
digitBeforeDivision = (i - mod(i,digitFactor));
digit = digitBeforeDivision / digitFactor;
fprintf('%d ',digit);
i = i - digitBeforeDivision;
end
end
第一个问题: 我正在尝试将具有随机数字的随机整数生成到数组中。然而,由于整数的边界值随着 'int8'、'int16'、'int32'、'int64' 和它们的无符号版本而变化,我无法决定我应该使用哪种类型来生成我的简单数组如下。参见:https://www.mathworks.com/help/matlab/ref/intmax.html
当我使用 randi(n, row, column) 时,其中 n 是上限整数值,行是行号,列是列号。但是,这并不能满足我解决问题的目的。那么,我应该使用哪种形式的 "rand" 函数?
A= [2 7 43 556 32 35 3 4566]
第二个问题: 如果我能达到第一个问题的目的,我该如何遍历数组中的每个数字呢?我想逐个数字地检查每个数字。就像在示例数组中一样,它应该首先检查 2、7、4 和 3、5 等等。
如有任何帮助,我们将不胜感激。
要在给定数据类型的整个范围内生成随机数,您可以使用以下方法:
n = int32(0);
type = class(n); % or you can specify it explicitly e.g. 'uint8' directly
randSize = [10 1];
randomArray = randi([intmin(type) intmax(type)],randSize,type);
要遍历数字,您可以使用除法和取模的组合来隔离每个数字。可能不是最优雅的解决方案,但它可以完成工作。我不确定你想如何处理你的特定应用程序的标志,所以我只是使用绝对值忽略它:
for i = abs(randomArray(:))'
numberOfDigits = ceil(log(double(abs(i)+1))/log(10)); % use log 10 to count digits
fprintf('\nisolating every digit for number %i: ',i);
for digitId = numberOfDigits:-1:1
digitFactor = 10^(digitId-1);
digitBeforeDivision = (i - mod(i,digitFactor));
digit = digitBeforeDivision / digitFactor;
fprintf('%d ',digit);
i = i - digitBeforeDivision;
end
end