dev*_*ium 1 functional-programming wolfram-mathematica
我试图以功能的方式在Mathematica中生成一组随机数.这是我目前的尝试:
Array[Random[Real, {-10, 10}], 7]
Run Code Online (Sandbox Code Playgroud)
问题是这是打印总是相同的数字,当然,这不是我想要的.我确实理解Mathematica正在评估Random[Real, {-10,10}]一次然后总是使用相同的值.我如何规避问题,保持这种功能风格?
谢谢
WRe*_*ach 15
第一个参数Array是一个应用于每个数组索引的函数(在本例中,值为1到7).如果你评价
Array[Random[Real, {-10, 10}], 7]
Run Code Online (Sandbox Code Playgroud)
结果是这样的:
{3.91766[1], 3.91766[2], 3.91766[3], 3.91766[4], 3.91766[5],
3.91766[6], 3.91766[7]}
Run Code Online (Sandbox Code Playgroud)
发生的事情是这样的:
Random[Real, {-10, 10}]评估产品3.91766.因此,我们看到一个表达式列表,如3.91766[1]奇数表达式,其中实数就像函数一样应用于整数.
如果意图生成7个不同随机数的列表,则可以使用:
Array[Random[Real, {-10, 10}] &, 7]
Run Code Online (Sandbox Code Playgroud)
这与原始表达的唯一区别在于'&'的存在.这使得第一个参数成为一个函数.该函数应用于每个数组索引(但忽略它),然后每次返回一个新的随机数.
获得此结果的另一种方法是Table:
Table[Random[Real, {-10, 10}], {7}]
Run Code Online (Sandbox Code Playgroud)
在当前版本的Mathematica中,该Random功能已过时,已被替换为RandomInteger和RandomReal.在这种情况下,RandomReal很有用:
RandomReal[{-10, 10}, 7]
Run Code Online (Sandbox Code Playgroud)
...其中第一个参数是可供选择的范围,第二个参数是所需值的数量.注意,也可以生成更高维的随机阵列,例如
RandomReal[{-10, 10}, {7, 7}]
Run Code Online (Sandbox Code Playgroud)
你可以用Array[Random[Real, {-10, 10}] &, 7].注意&符号,它基本上将第一个参数转换为没有参数的函数.
但WReach的方法远远优于......