gpt4 book ai didi

matlab - 当需要索引位置时,Matlab 中 ismember 的更快替代方案?

转载 作者:行者123 更新时间:2023-12-02 00:47:03 26 4
gpt4 key购买 nike

我在 Matlab 中使用 ismember 来查找向量 A 中不包含在向量 idx 中的整数。我想知道我是否可以使用更快的东西。

关于我的问题,我找到了 this answer但它在这里似乎不起作用,因为我需要索引位置。

rng default;  %for reproducibility
A=randi([0 6],2097144,1); %2097144x1
idx=randi([0 6],4,1); %4x1

tic
% Find elements of idx not in A
[idx2,~,~]=unique(A);
[~,idx3]=ismember(idx,idx2);
idx4=idx(~idx3);
toc

Elapsed time is 0.278835 seconds.

最佳答案

您可以使用 setdiff相反,它将找到第二个输入中不存在的第一个输入的元素。

result = setdiff(idx, A);

对于您提供的输入大小,我的执行时间缩短了 35 倍。这可能是因为您正在使用 unique(A) 这将是昂贵的,因为它必须排序和处理那个巨大的数组。

作为旁注,tictoc 不是一种非常准确的基准代码方法。相反,您需要使用 timeit

function comparison()
A = randi([0, 6], 2097144, 1);
B = randi([0, 6], 4, 1);

disp(timeit(@()approach1(A, B)));
disp(timeit(@()approach2(A, B)));
end

function idx4 = approach1(A, B)
[idx2,~,~]=unique(A);
[~,idx3]=ismember(B, idx2);
idx4 = B(~idx3);
end

function res = approach2(A, B)
res = setdiff(B, A);
end

关于matlab - 当需要索引位置时,Matlab 中 ismember 的更快替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42955489/

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