我想用一个例子来展示我想要的东西。
A = [5 1 2 4 3]; % of distinct values
B = [3 3 1 5 2];
我可以找到在MATLAB中实现的库函数:
C = [5 5 2 3 1] = someFun(A, B)
即。 C(i) = find(A == B(i))
请注意,我要求库函数,因为在这种情况下它是高度优化的。如果您确定不存在这样的功能,那也是一个答案。
答案 0 :(得分:3)
我愿意:
IX(A) = [1:length(A)];
C=IX(B)
这比ismember
解决方案快10倍:
A=randperm(1e5);
B=ceil(rand(1,1e4)*length(A));
tic;
[D,C1]=ismember(B,A);
toc % Elapsed time is 0.013728 seconds.
tic
IX(A) = [1:length(A)];
C=IX(B);
toc % Elapsed time is 0.001506 seconds.
但这可以在更严格的条件下使用:
A
仅包含唯一的整数。B(i)
<所有max(A)
i
max(A)
答案 1 :(得分:1)
一些解决方案:
C = zeros(size(B));
for i=1:numel(B)
C(i) = find(A == B(i));
end
C = arrayfun(@(n)find(A==n), B)
[C,~] = find( bsxfun(@eq, B, A.') )
[~,C] = ismember(B,A)
答案 2 :(得分:0)
你能澄清一下你的问题吗?
如果你想要一个返回包含值B(i)的A的索引的函数,那么这样的函数应该可以工作:
for(int i = 0; i < B.length; i++)
{
for(int q = 0; q < A.length; q++)
{
if(B[i] == A[q])
C[i] = q;
}
}