我试图以功能方式在Mathematica中生成一组随机数。这是我目前的尝试:
Array[Random[Real, {-10, 10}], 7]
问题是这是打印总是相同的数字,当然,这不是我想要的。我确实理解Mathematica正在评估Random[Real, {-10,10}]
一次,然后总是使用相同的值。我如何规避问题,保持这种功能风格?
由于
答案 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]}
发生了什么事:
Random[Real, {-10, 10}]
正在评估产品3.91766
。因此,我们看到一个像3.91766[1]
这样的表达式列表,这是一个奇怪的表达式,其中实数就像函数一样应用于整数。
如果意图生成7个不同随机数的列表,则可以使用:
Array[Random[Real, {-10, 10}] &, 7]
这与原始表达之间的唯一区别是'&'的存在。这使得第一个参数成为一个函数。该函数应用于每个数组索引(但忽略它),然后每次返回一个新的随机数。
获取此结果的另一种方法是使用Table
:
Table[Random[Real, {-10, 10}], {7}]
在当前版本的Mathematica中,Random
功能已过时,已被RandomInteger
和RandomReal
取代。在这种情况下,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。希望有所帮助!