第一个问题: 我试图生成随机数字的随机整数到一个数组。但是,由于整数的边界值变化为' int8',' int16',' int32',' int64'和它们的未签名版本,我无法决定我应该使用哪种类型来生成我的简单数组,如下所示。请参阅:https://www.mathworks.com/help/matlab/ref/intmax.html
当我使用 randi(n,row,column)时,其中n是上限整数值,row是行号,列是列号。但是,这不符合我解决问题的目的。那么," rand"我应该使用哪个功能?
A= [2 7 43 556 32 35 3 4566]
第二个问题: 如果我能在第一个问题中实现我的目的,我如何迭代数组中的每个数字?我想分别逐位检查每个数字。与示例数组中一样,它应首先检查2,和7,以及4和3以及5,依此类推。
任何帮助都将不胜感激。
答案 0 :(得分:0)
要在给定数据类型的整个范围内生成随机数,您可以使用以下内容:
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