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

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)

发生的事情是这样的:

  1. Random[Real, {-10, 10}]评估产品3.91766.
  2. 此结果用作"函数"并应用于每个数组索引.

因此,我们看到一个表达式列表,如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功能已过时,已被替换为RandomIntegerRandomReal.在这种情况下,RandomReal很有用:

RandomReal[{-10, 10}, 7]
Run Code Online (Sandbox Code Playgroud)

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

RandomReal[{-10, 10}, {7, 7}]
Run Code Online (Sandbox Code Playgroud)


Bre*_*ion 6

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

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

  • @ Mr.Wizard尽管出现了,但这只是同时答案的另一个案例.我的原始回复并没有包含这个表达,尽管我在点击"保存"后立即想到了它.我立即在编辑未记录的时间窗口内添加了它,当我保存更新的响应时,Brett贡献了他的. (4认同)