gpt4 book ai didi

matlab - 如何将一行的元素与同一矩阵中的每一行的元素进行比较

转载 作者:太空宇宙 更新时间:2023-11-03 19:54:18 25 4
gpt4 key购买 nike

我有矩阵:

a = [ 1 2 3 4;
2 4 5 6;
4 6 8 9]

我想将每一行与其他两行一一比较。如果他们共享相同的 key ,那么结果将告诉他们有一个公共(public) key 。

最佳答案

使用 @gnovice关于通过nchoosek 获取所有组合的想法,我提出另外两个解决方案:

  • 一个使用 ismember(如 @loren 所述)
  • 另一个使用 bsxfuneq 函数句柄

唯一的区别是 intersect 排序并只保留唯一的公共(public)键。

a = randi(30, [100 20]);
%# a = sort(a,2);

comparisons = nchoosek(1:size(a,1),2);
N = size(comparisons,1);
keys1 = cell(N,1);
keys2 = cell(N,1);
keys3 = cell(N,1);

tic
for i=1:N
keys1{i} = intersect(a(comparisons(i,1),:),a(comparisons(i,2),:));
end
toc

tic
for i=1:N
query = a(comparisons(i,1),:);
set = a(comparisons(i,2),:);
keys2{i} = query( ismember(query, set) ); %# unique(...)
end
toc


tic
for i=1:N
query = a(comparisons(i,1),:);
set = a(comparisons(i,2),:)';
keys3{i} = query( any(bsxfun(@eq, query, set),1) ); %'# unique(...)
end
toc

...与以下时间比较:

Elapsed time is 0.713333 seconds.
Elapsed time is 0.289812 seconds.
Elapsed time is 0.135602 seconds.

请注意,即使预先对 a 进行排序并在循环(注释部分)内添加对 unique 的调用,这两种方法仍然比 intersect.

关于matlab - 如何将一行的元素与同一矩阵中的每一行的元素进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1749888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com