MATLAB在数组

时间:2017-11-03 14:06:21

标签: arrays matlab random digit

第一个问题: 我试图生成随机数字的随机整数到一个数组。但是,由于整数的边界值变化为' 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,依此类推。

任何帮助都将不胜感激。

1 个答案:

答案 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