根据邻居更改矩阵元素

时间:2014-04-06 09:35:30

标签: arrays matrix matlab

我需要编写一个脚本来将矩阵A(1x25)更改为B(1x24)

A = [1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 0 1 1 1 1 1];

我想通过此规则更改此矩阵:

  • 我希望将所有选中的元素替换为两个,只要它们是邻居当有两个连续的1(1和1)时,将它们替换为1.
  • 当有两个连续的0时,将它们替换为-1
  • 如果有1后跟0,请用i。
  • 替换它们
  • 如果有0后跟1,请用-i。
  • 替换它们

最后我需要有这个Matrix B(1x24)

B = [1 1 1 i -1 -i 1 1 1 i -1 -i 1 1 1 i -1 -i i -i 1 1 1 1];

3 个答案:

答案 0 :(得分:0)

A = [1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 0 1 1 1 1 1];
for Index=1:length(A)-1
   Temp=A(Index)+A(Index+1);
   switch(Temp)
       case 0, B(Index)=-1;
       case 1, if(A(Index)==1) B(Index)=i; else B(Index)=-i; end;
       case 2, B(Index)=1;
   end
end

答案 1 :(得分:0)

<强>代码

dA = diff(A);
B = i*(dA==-1) + A(2:end).*~dA + -1*(~A(2:end).*~dA) + -i*(dA==1)

i = 5 的样本输出

B = 
 1 1 1 5 -1 -5 1 1 1 5 -1 -5 1 1 1 -1 -5 5 -5 1 1 1 1

答案 2 :(得分:0)

A = [1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 0 1 1 1 1 1]; %// data
values = [-1 -i i 1]; %// values for 00, 01 10, 11 in that order

B = values(2*A(1:end-1)+A(2:end)+1);