我有一个函数的输出是二部图的邻接矩阵的列表,我想检查随机生成的矩阵是否具有这些矩阵之一作为其中的子矩阵。
我生成矩阵列表的功能是:
Krsvariants[r_, s_] := Module[{aa}, aa = Subsets[Range[1, r + s], {r}];
Table[
Table[
If[MemberQ[Tuples[aa[[k]], 2], {i, j}] \[Or]
MemberQ[Tuples[Complement[Range[1, r + s], aa[[k]]], 2], {i,j}], 0, 1], {i, 1, r + s}, {j, 1, r + s}],
{k, 1, Length[aa]}]]
对于r = 2,s = 3有输出
{{{0, 0, 1, 1, 1}, {0, 0, 1, 1, 1}, {1, 1, 0, 0, 0}, {1, 1, 0, 0,
0}, {1, 1, 0, 0, 0}}, {{0, 1, 0, 1, 1}, {1, 0, 1, 0, 0}, {0, 1, 0,
1, 1}, {1, 0, 1, 0, 0}, {1, 0, 1, 0, 0}}, {{0, 1, 1, 0, 1}, {1, 0,
0, 1, 0}, {1, 0, 0, 1, 0}, {0, 1, 1, 0, 1}, {1, 0, 0, 1, 0}}, {{0,
1, 1, 1, 0}, {1, 0, 0, 0, 1}, {1, 0, 0, 0, 1}, {1, 0, 0, 0, 1}, {0,
1, 1, 1, 0}}, {{0, 1, 1, 0, 0}, {1, 0, 0, 1, 1}, {1, 0, 0, 1,
1}, {0, 1, 1, 0, 0}, {0, 1, 1, 0, 0}}, {{0, 1, 0, 1, 0}, {1, 0, 1,
0, 1}, {0, 1, 0, 1, 0}, {1, 0, 1, 0, 1}, {0, 1, 0, 1, 0}}, {{0, 1,
0, 0, 1}, {1, 0, 1, 1, 0}, {0, 1, 0, 0, 1}, {0, 1, 0, 0, 1}, {1, 0,
1, 1, 0}}, {{0, 0, 1, 1, 0}, {0, 0, 1, 1, 0}, {1, 1, 0, 0, 1}, {1,
1, 0, 0, 1}, {0, 0, 1, 1, 0}}, {{0, 0, 1, 0, 1}, {0, 0, 1, 0,
1}, {1, 1, 0, 1, 0}, {0, 0, 1, 0, 1}, {1, 1, 0, 1, 0}}, {{0, 0, 0,
1, 1}, {0, 0, 0, 1, 1}, {0, 0, 0, 1, 1}, {1, 1, 1, 0, 0}, {1, 1, 1,
0, 0}}}
对应于10个不同的矩阵。然后,我希望检查随机矩阵是否包含这10个中的至少一个,并计数多少个。
TK23[M_, n_] := Module[{S, k, i},
S = Subsets[Range[n], {5}];
Return[Count[
Table[MemberQ[Krsvariants[2, 3], M[[S[[k]], S[[k]]]]] , {k, 1,
Binomial[n, 5]}], True]];]
但是当我运行它时,即使将其应用于肯定包含10之一的矩阵,它似乎总是返回零。
mmK = Krsvariants[2, 3]
tk23[mM_] := Module[{mS, n},
n = Length@mM;
mS = Subsets[Range[n], {5}];
Total@Table[Count[mmK, mM[[s, s]]], {s, mS}]
]
编辑:如果要将行索引与列索引分开,请使用
Total@Table[Count[mmK, mM[[s1, s2]]], {s1, mS}, {s2, mS}]