让我们说我有一个数组:
A = [0, -2, 0, 0, -3, 0, -1, 0];
我想知道它是否适合以下任何模式:
B = [1, 1, 1 , 0, 0 , 0 , 0, 0,];
C= [1, 1, 0 , 1, 0 , 0 , 0, 0,]
D= [0, 1, 0 , 1, 0 , 1 , 0, 0];
其中1表示该数字是唯一的,0表示该数字保持不变,直到满足另一个1,但与之前的数字不同。以下是一些例子:
[-3, -2, -1, 0, 0, 0, 0, 0]; --- A matches B.
[-3, -2, -1, -1, 0, 0, 0, 0]; -- This matches C
[-3, -3, 3, 3, -2, -2, 0, 0]; -- This matches D
是否有任何Matlab功能,或者我必须以自己的方式思考?任何建议,我对Matlab都很陌生。
答案 0 :(得分:0)
您的规则有问题,您似乎将0视为特殊情况(即,它不是数字或其他内容)。
你可以做这样的事情:A=[-3, -2, -1, -1, 0, 0, 0, 0];
[ia ib] = unique(A);
R = zeros(1,8);
R(ib) = 1
>> R =
1 1 0 1 0 0 0 1
并匹配此,假设您将0视为一个数字,就像您在规则中所述。
如果您希望0为特殊情况,则需要:
A=[-3, -2, -1, -1, 0, 0, 0, 0];
[ia ib] = unique(A);
ib(ia==0)=[];
R = zeros(1,8);
R(ib) = 1
>> R =
1 1 0 1 0 0 0 0
并简单地将此向量与您的B,C,D等匹配。第二种方法与您想要的答案匹配,但与您声明的规则不匹配。第一种方法匹配您所声明的规则,但不匹配您想要的输出。
============= EDIT ============
我在2010b和时间线的某个时间,unique
的工作方式发生了变化,如果您使用的是2012b以上的任何版本,则需要添加legacy
。
抱歉,我忘记提及:
只需将其更改为:
[ia ib] = unique(A,'legacy');
它应该可以正常工作。