regroupe the results in a matrix

2 次查看(过去 30 天)
hii i have this
f= 1 0
0 1
0 2
1 3
0 4
1 5
1 6
0 7
this indicate the numbers from 0 to 7 in decimal i want to regroupe the 1 in a matrix and at the same time tell which number it is and do the same thing with 0 i have a mistake somewhere here's the program
N=8;
r=3;
A=zeros(N,r);
Q=zeros(N,1);
for k=0:1:N-1
A(k+1,:)=dec2bin(k,r)-'0';
Q(k+1,1)=xor(xor(A(k+1,1),A(k+1,2)),A(k+1,3));
f=xor(Q,1);
end
for k=0:1:N-1
if f(k+1)==1
se=k
S(k+1,1)=se
else
ss=k
C(k+1,1)=ss
end
end
S =
0
0
0
0
3
5
0
6
C =
0
1
2
0
4
0
0
7
i don't know how to do to delete the 0 i just want 0356 and 1247 to appears
i hope you understand me

采纳的回答

Thorsten
Thorsten 2014-12-1
编辑:Thorsten 2014-12-1
Ok, here is my 2nd solution. There's also a faster way to compute f, I think:
f = 1 - (mod(sum(A'), 2) == 1);
x = 0:7;
s = x(~logical(f));
c = x(logical(f));
  3 个评论
Thorsten
Thorsten 2014-12-1
Sure, but please start a new question to that others can help you, too.
Dija
Dija 2014-12-1
it is about this program too and i guess that you can understand me more than others it is okey if you can't help me but i will try with you first :)
how can i discard any bianry digit i want in A for example if i discard the first one in A
A =
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
i want to get this
A =
0 0
0 1
1 0
1 1
0 0
0 1
1 0
1 1

请先登录,再进行评论。

更多回答(3 个)

dpb
dpb 2014-11-30
编辑:dpb 2014-11-30
>> s=find(f(:,1))
s =
1
4
6
7
>> c=f(s,2)
c =
0
3
5
6
>>
Looks like your desired S above is from some other sample dataset...f(2,1)==0
ADDENDUM
OK, following your comment/plea; the complementary is by the above
s=find(f(:,1);
c=f(s,2);
s=f(find(f(:,1)==0,2));
This is a little convoluted; I did it that way because as noted I thought you were looking for the position in the original vector, not the two results.
More straightforward in the latter case is to use logical addressing instead of find --
ix=f(:,1)==1); % the '1' location vector
s=f(ix,2);
c=f(~ix,2);
  4 个评论
dpb
dpb 2014-12-1
Does too...
>> f
f =
1 0
0 1
0 2
1 3
0 4
1 5
1 6
0 7
>> ix=f(:,1)==1;
>> s=f(ix,2)
ans =
0
3
5
6
>> c=f(~ix,2)
c =
1
2
4
7
>>

请先登录,再进行评论。


Thorsten
Thorsten 2014-12-1
x = f(:,2);
x(logical(f(:,1)))
ans =
0
3
5
6
x(~logical(f(:,1)))
ans =
1
2
4
7
  9 个评论
dpb
dpb 2014-12-1
Well, again we're mis-communicating on what you mean by "which number it is" -- whether it's the location in the array or the numeric value. Since you weren't happy with the latter in the demonstrated solution I thought you meant the position again which find returns.
If it's actually the numeric value then the logic array solution is the more straightforward as demonstrated with the inputs in a 2-column array. If you don't put them in the array, then use whatever is the storage for each column in place of the array.

请先登录,再进行评论。


Andrei Bobrov
Andrei Bobrov 2014-12-1
S = num2str(f(f(:,1)>0,2))';
C = num2str(f(~f(:,1),2))';
  1 个评论
Dija
Dija 2014-12-1
the same error :( Index exceeds matrix dimensions.
Error in Untitled2 (line 12) S = num2str(f(f(:,1)>0,2))'

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Logical 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by