1

我有两个非常长的二维列表,分别称为“first_data*”和“second_data”,我想找到相等的元素并将它们放在列表“final_data”中。我在这里有一个 MWE:

first_data  = [1 2; 3 4]';
second_data = [1 2; 9 4]';


final = [];
for i=1:length(first_data(:, 1))
    for j=1:length(second_data(:, 1))
        if(first_data(i, 2) == second_data(j, 2))
            final = [final first_data(i, 1)];
        end
    end
end

根据需要,这给了我 2。这是可行的,但对于非常大的数据集来说,它的计算量非常大。有没有更有效的方法来编写上述代码?

4

4 回答 4

1

ismember会让你做你想做的事。

%# identify the rows in first_data's second column
%# that occur in second_data's second column
goodIdx = ismember(first_data(:,2),second_data(:,2));

%# return the corresponding values of first_data's first column
final = first_data(goodIdx,1);
于 2013-02-24T13:58:58.453 回答
1

试试这个代码:

first_data  = [1 2; 3 4]';
second_data = [1 2; 9 4]';
diff_data=first_data-second_data;
Ind=find(diff_data==0);
final=first_data(Ind);
于 2013-02-24T14:35:07.467 回答
0

采用:

[c, ia, ib] = intersect(first_data(:, 2), second_data(:, 2));
final = second_data(ib,1);

注意:我没有对此进行测试,但它应该可以工作(至少到行/列混合)

于 2013-02-24T13:57:53.590 回答
0

那么你的两个数据集可以完全用下面的元组来描述吗?

“first_data”由(i,j,data_1)- 描述,表示值 data_1 位于第 i 行第 j 列

“second_data”由(i,j,data_2)

你想找到这样的元组相等吗?

使用布隆过滤器将“first_data”和“second_data”转换为集合

使用“first_data”和“second_data”的布隆过滤器表示执行集合交集,并使用两个表示的按位与获得基本恒定的时间集合交集。

于 2013-02-24T14:44:16.570 回答