我有矩阵:
a = [ 1 2 3 4; 2 4 5 6; 4 6 8 9] 我想将每一行与其他两行一一比较。如果它们共享相同的密钥,那么结果将告诉他们具有公共密钥。
回答:
这是一个解决方案(可以推广到比问题中的样本更大的矩阵):
comparisons = nchoosek(1:size(a,1),2); N = size(comparisons,1); keys = cell(N,1); for i = 1:N keys{i} = intersect(a(comparisons(i,1),:),a(comparisons(i,2),:)); end 函数
NCHOOSEK用于生成行比较的所有
唯一组合。对于问题中的矩阵a ,您将获得comparisons = [1 2; 1 3; 2 3] ,这意味着我们需要比较行1和2,然后比较1和3,最后是2和3。 keys是一个存储每个比较结果的
单元格数组 。对于每个比较,函数
INTERSECT用于查找公共值(即键)。用于矩阵a在给定的问题,就会得到keys = {[2 4], 4, [4 6]}
更多&回答...