优雅的矢量化版本的CHANGEM(替代值) - MATLAB

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?),但是,它确实是你所要求的:)


Div*_*kar 6

矢量化实现,CHANGEMbsxfun,max

不久之后,我被编写了一个定制的 矢量化版本,并且作为更大问题的一部分changem实现.引用的解决方案可以在这里找到.然后,通过以下几个链接,我看到了这篇文章,并认为它可以作为一个解决方案在这里发布,以便在未来的读者中轻松找到,因为这个问题只需要一个高效的矢量化版本.那么,这是功能代码 - bsxfunmaxchangem

%// 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)