2013-10-25 132 views

回答

6

有几种方法可以做到这一点,但这里是一个短的一个

[~,ind]=ismember(A,B(:,1)); 
Anew = reshape(B(ind,2),size(A)) 

如果可以假设的B第一列始终0:size(B,1)-1,那么就比较容易,成为刚刚reshape(B(A+1,2),size(A))

+0

+1,可能比我的解决方案更快。 – Daniel

+0

+1。非常整洁的解决方案! –

1
arrayfun(@(x)(B(find((x)==B(:,1)),2)),A) 
+2

'arrayfun'是一种简单的方式来表示'for'循环在一行中,但请记住['arrayfun'性能通常不是你所期望的](http://stackoverflow.com/questions/12522888/ arrayfun-可待显著-慢于一个显式循环功能于MATLAB的原因)。不过,为简明起见+1! – chappjc

+0

@chappjc:Thx,已添加书签。从来没有注意到arrayfun可能会很慢。 – Daniel

相关问题