【问题标题】:MATLAB generate random integer with random digit in arrayMATLAB在数组中生成具有随机数字的随机整数
【发布时间】:2018-04-16 07:12:34
【问题描述】:

第一个问题: 我正在尝试将具有随机数字的随机整数生成到数组中。但是,由于整数的边界值随 '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 等等。

任何帮助将不胜感激。

【问题讨论】:

  • “随机整数”和“随机数字”对我来说是同义词,但也许它们在您的应用程序中意味着不同的东西。你能解释一下你想要做什么吗?由于整数值的限制,您是否难以确定整数类型?你的情况有什么限制?为什么指定上限、行和列不能满足您的目的?您的目的和期望的输出到底是什么?
  • @beaker 我想生成一个数组,正如我在示例中实际展示的那样。位数可以是 2、3、4 或更多。因此,我将采用用户输入来决定数组的长度。通过使用此输入,我将确定数组的列号和行号始终为 1。
  • 好的,所以你想要随机整数,每个整数都有一个随机的 number 个数字?你想要的位数范围是多少?整数可以是负数吗?
  • 数字可以是0或正整数。
  • 它确实有效,但由于我无法决定应该使用 uint8 还是 int32,所以我很困惑。我现在修好了。谢谢!我也想知道为什么这个问题得到-1?

标签: arrays matlab random digit


【解决方案1】:

要在给定数据类型的全范围内生成随机数,您可以使用以下方法:

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

【讨论】:

  • 这对我来说是一种非常先进的方法,但它确实有效。你是怎么想出这个解决方案的?你能通过实现这段代码来解释你的想法吗?
  • 假设数字是 225。这个数字有 3 位数字,因为 log_10(225) = 2.35(四舍五入 = 3)。第一个数字是通过(225 - 25) / 100 = 2 获得的。 225 modulo 100 = 25 得到 25,而 100 是位置 10^2 = 100 的 10 次方。另外,我修复了一个小错误,它会导致像 10000 这样的数字失败。
猜你喜欢
  • 2010-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-13
  • 2018-09-07
  • 1970-01-01
  • 1970-01-01
  • 2012-02-11
相关资源
最近更新 更多