在 Numpy 中生成强对称矩阵

Generating a Strongly Symmetric Matrix in Numpy

关于如何有效地生成固定维度的任意 numpy 数组 (n,m) 的任何想法,其中所有行都是彼此的排列并且所有列都是彼此的排列(即强对称)?

这是生成此类数组的一种方法。设 anm 的最大公约数。

  1. 将整个数组分成 a a 个块
  2. 在每个块上,生成一个拉丁方(讨论见this问题)
  3. 随机排列数组的行和列
  4. 如果需要,执行符号替换。也就是说,如果 a 是 3,也许你把网格中的所有 3 都变成 2。

我不确定这种方法是否可以生成所有可能的这样的网格,但它应该能够生成很多这样的网格。完成第 1 步和第 2 步后,您将拥有一个有效数组,其余步骤只会增加更多随机性。

当然,生成这样一个数组的最简单方法就是将其全部填充为 1,但这不是您要找的。