尝试在Mathematica中生成随机数组时出现问题

时间:2011-08-19 03:47:20

标签: functional-programming wolfram-mathematica

我试图以功能方式在Mathematica中生成一组随机数。这是我目前的尝试:

Array[Random[Real, {-10, 10}], 7]

问题是这是打印总是相同的数字,当然,这不是我想要的。我确实理解Mathematica正在评估Random[Real, {-10,10}]一次,然后总是使用相同的值。我如何规避问题,保持这种功能风格?

由于

3 个答案:

答案 0 :(得分:15)

Array的第一个参数旨在成为应用于每个数组索引的函数(在本例中为值1到7)。如果您评估

Array[Random[Real, {-10, 10}], 7]

结果是这样的:

{3.91766[1], 3.91766[2], 3.91766[3], 3.91766[4], 3.91766[5], 
 3.91766[6], 3.91766[7]}

发生了什么事:

  1. Random[Real, {-10, 10}]正在评估产品3.91766
  2. 此结果用作“函数”并应用于每个数组索引。
  3. 因此,我们看到一个像3.91766[1]这样的表达式列表,这是一个奇怪的表达式,其中实数就像函数一样应用于整数。

    如果意图生成7个不同随机数的列表,则可以使用:

    Array[Random[Real, {-10, 10}] &, 7]
    

    这与原始表达之间的唯一区别是'&'的存在。这使得第一个参数成为一个函数。该函数应用于每个数组索引(但忽略它),然后每次返回一个新的随机数。

    获取此结果的另一种方法是使用Table

    Table[Random[Real, {-10, 10}], {7}]
    

    在当前版本的Mathematica中,Random功能已过时,已被RandomIntegerRandomReal取代。在这种情况下,RandomReal很有用:

    RandomReal[{-10, 10}, 7]
    

    ...其中第一个参数是可供选择的范围,第二个参数是所需值的数量。注意,也可以生成更高维的随机数组,例如

    RandomReal[{-10, 10}, {7, 7}]
    

答案 1 :(得分:6)

您可以使用Array[Random[Real, {-10, 10}] &, 7]。注意&符号,它基本上将第一个参数转换为没有参数的函数。

但WReach的方法远远优于......

答案 2 :(得分:3)

我注意到我并不是百分之百地表达了这一点......但我有一些似乎有帮助的链接。以下似乎对我有用。数字为(1.)最小值(2.)最大值和(3.)要进行的数字。

RandomInteger[{1,5},10]

从这里开始:here。希望有所帮助!