7 arrays matlab matrix vectorization
在Matlab 2012b中,有一个changem
函数允许您用一组键指定的其他值替换矩阵的元素:
数据数组中的替换值
如果我没有Mapping工具箱,是否有一种优雅/矢量化的方法来做同样的事情?
Rod*_*uis 10
是的,使用ismember
:
A = magic(3);
oldCode = [ 8 9];
newCode = [12 13];
[a,b] = ismember(A,oldCode);
A(a) = newCode(b(a));
Run Code Online (Sandbox Code Playgroud)
我不知道changem
,我怀疑上面的内容不会完全覆盖它的功能(为什么TMW会引入changem
?),但是,它确实是你所要求的:)
矢量化实现,CHANGEM
用bsxfun
,max
不久之后,我被编写了一个定制的 矢量化版本,并且作为更大问题的一部分changem
实现.引用的解决方案可以在这里找到.然后,通过以下几个链接,我看到了这篇文章,并认为它可以作为一个解决方案在这里发布,以便在未来的读者中轻松找到,因为这个问题只需要一个高效的矢量化版本.那么,这是功能代码 - bsxfun
max
changem
%// CHANGEM_VECTORIZED Vectorized version of CHANGEM with MAX, BSXFUN
function B = changem_vectorized(A,newval,oldval)
B = A;
[valid,id] = max(bsxfun(@eq,A(:),oldval(:).'),[],2); %//'
B(valid) = newval(id(valid));
return;
Run Code Online (Sandbox Code Playgroud)
自定义版本中使用的语法遵循与以下相同的语法changem.m
-
function B = changem(A, newval, oldval)
%CHANGEM Substitute values in data array ...
Run Code Online (Sandbox Code Playgroud)