在矩阵列表上使用MemberQ

问题描述 投票:0回答:1

我有一个函数的输出是二部图的邻接矩阵的列表,我想检查随机生成的矩阵是否具有这些矩阵之一作为其中的子矩阵。

我生成矩阵列表的功能是:

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之一的矩阵,它似乎总是返回零。

wolfram-mathematica adjacency-matrix
1个回答
0
投票
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}]
© www.soinside.com 2019 - 2024. All rights reserved.