フィルターのクリア

regroupe the results in a matrix

1 回表示 (過去 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))'

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

カテゴリ

Help Center および File ExchangeOperating on Diagonal Matrices についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by