【问题标题】:Random magic matrix giving unexpected results随机魔法矩阵给出意想不到的结果
【发布时间】:2015-09-28 19:02:40
【问题描述】:

我试图在 Octave 中创建随机幻方,并尝试了类似rand(magic(3)) 的方法,它给出了意想不到的无穷无尽的结果,如下所示:

 ans(:,:,1,1,2,1,1,1,1) =

 0.894903   0.296415   0.143990
 0.186976   0.305691   0.505485
 0.224823   0.834031   0.285508
 0.336706   0.318158   0.076293 

在尝试 rand(magic(4)) 和 5、6、7 时...它给出了类似这样的消息

错误:内存不足或尺寸对于 Octave 的索引类型而言太大

这个模糊结果的可能原因是什么?

【问题讨论】:

  • 你想做什么? magic(3) 返回一个 3x3 矩阵。函数 rand 期望每个维度的元素数量作为参数,因此您正在创建一个 8x3x4x1x5x9x6x7x2 矩阵。对于 rand(magic(4)) 矩阵将有 prod(magic(4)(:))=20922789888000 个元素,这些元素太大而无法放入内存
  • 我看到了丹的回答,他们正在部分澄清问题。虽然magic(n) 返回一个带有数字1:n*n 的正方形,但您只是在谈论不重复的数字。这打开了更多的功能。请更新您的问题并明确什么是魔方。

标签: matlab octave magic-square


【解决方案1】:

你想做什么? magic(3) 创建一个 3-by-3 矩阵,其中所有行和列加起来是相同的数字。 rand(x) 创建一个由均匀分布的随机数组成的 n 维矩阵。例如,如果您调用y = rand([1,2,3]),您将得到一个3 维的均匀分布数字矩阵。 y 的尺寸将与您的输入相匹配,即 size(y) 应返回 [1,2,3] 并且元素数将为 prod(y)。因此rand(magic(3)) 的元素数应该等于prod(prod(magic(3))),即362880。如果您为 rand(magic(4)) 执行此操作,那么元素的数量将超过 20 万亿,这就是您内存不足的原因。

【讨论】:

  • 那我怎样才能创建一个随机幻方?我的意思是 octave 每次都返回相同的 n*n 幻方。
  • 行列元素之和相同的矩阵。
  • 对角线呢?使用对角线,我认为您无法创建随机幻方(除非您从旋转和反射中获得的 8 个等效矩阵中随机选择...)。如果您忽略对角线,那么只需将行和列随机排列...
  • 是的,对角线元素的总和应该相同,没有数字应该重复。
  • @HimagraChawla:你有什么理由不接受这个答案?
猜你喜欢
  • 2021-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-19
  • 2017-01-05
  • 2021-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多