regroupe the results in a matrix

2 ビュー (過去 30 日間)
Dija
Dija 2014 年 11 月 30 日
コメント済み: dpb 2014 年 12 月 1 日
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 件のコメント
Dija
Dija 2014 年 12 月 1 日
it doesnt work too
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 件のコメント
Dija
Dija 2014 年 12 月 1 日
thank you
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))'

サインインしてコメントする。

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by