Wolfram mathematica 在矩阵列表上使用MemberQ
我有一个函数,它的输出是二部图的邻接矩阵列表,我想检查随机生成的矩阵中是否有一个矩阵作为子矩阵 我用于生成矩阵列表的函数是:Wolfram mathematica 在矩阵列表上使用MemberQ,wolfram-mathematica,adjacency-matrix,Wolfram Mathematica,Adjacency Matrix,我有一个函数,它的输出是二部图的邻接矩阵列表,我想检查随机生成的矩阵中是否有一个矩阵作为子矩阵 我用于生成矩阵列表的函数是: 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
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}]
我对你的问题描述感到困惑。你为什么不能直接使用
Count
?例如,mmK=krs变量[2,3];计数[MMK,MMK[[ 1 ] ] < /代码>。我想考虑KRSt变体的所有元素,而不仅仅是它内部的元素,对于这个情况,我想计算KRSt变体的任何元素出现在例如10x10矩阵中的次数:“出现在”中,你的意思是“是子矩阵”吗?或者你真的是说(看起来)可以通过删除10 x 10矩阵中的任何5行和相同的5列来生成?下面的答案假设为后者。很抱歉不清楚。我想要的是,如果以10x10矩阵为例,它会检查10x10中每个可能的5x5子矩阵,并检查它是否匹配任何krs变量,然后计算匹配的总数。在初始代码中,您使用了相同的行和列集(例如,前五行和前五列)。下面我就是这么做的。你现在是说你想让它们独立变化吗?补充。进一步思考后,你得到的第一个表达式是我想要的,但当我在随机图上运行它时,我生成了10个点,边概率为0.6,我总是得到零,对于那些参数,情况不应该是这样,我已经计算了大小为2,3的二部图的预期数量,应该是大约3。代码按照您的要求执行。它很容易测试mA=ConstantArray[0,10,10}];s=Sort@RandomSample[Range@10, 5]; mA[[s,s]]=mmK[[1]];tk23[mA]