Wolfram mathematica 生成所有(0,1)nxn矩阵

Wolfram mathematica 生成所有(0,1)nxn矩阵,wolfram-mathematica,Wolfram Mathematica,在研究一个与维斯坦猜想有关的问题时(https://cs.uwaterloo.ca/journals/JIS/VOL7/Sloane/sloane15.pdf),我需要为n=2,3,4,。。。如果您考虑正确的二进制序列并对它们进行相应的分区,这并不难。例如,以下是所有3 x 3矩阵: With[{n = 3}, lis = PadLeft[IntegerDigits[#, 2], n^2]& /@ Range[0, 2^n^2 - 1]; mats = (Partition[#,

在研究一个与维斯坦猜想有关的问题时(https://cs.uwaterloo.ca/journals/JIS/VOL7/Sloane/sloane15.pdf),我需要为n=2,3,4,。。。如果您考虑正确的二进制序列并对它们进行相应的分区,这并不难。例如,以下是所有3 x 3矩阵:

With[{n = 3}, 
 lis = PadLeft[IntegerDigits[#, 2], n^2]& /@ Range[0, 2^n^2 - 1]; 
 mats = (Partition[#, n] & ) /@ lis
]; 
Weisstein的猜想涉及到,对于每个n=2,3,…,计算特征值均为实和正的矩阵的数量。对于n=2,有3个;对于n=3,有25个;对于n=4,有543个;等等特征值的计算很耗时,但很简单


然而,我感兴趣的是找到枚举nxn矩阵的其他方法。为了得到所有这些,我使用了整数的基2表示形式,最大为2^(n^2),并进行了分区以生成矩阵。必须有其他(更有效的)方法。

我们可以使用内置的Mathematica函数
元组。您的3x3示例变得非常简单

ms = Tuples[{1, 0}, {3, 3}];
排序的枚举可以通过二进制数完成

FromDigits[#, 2] & /@ Flatten /@ ms

要可视化订单,请执行以下操作:

ArrayPlot[#, ImageSize -> 20, Mesh -> All] & /@ ms

可能更适合,尽管他们可能会因为过于简单而嗤之以鼻=^_^=