what is the single command?????????

I want to create matrix size is 100*12. Each row contain only 5 zeros other elements are 1. for ex
A=[1 1 1 0 0 1 1 0 0 0 1 1 ;
0 0 1 1 0 0 1 1 0 1 1 1;]
Note: Nobody row is repeated

2 Kommentare

Stephen23
Stephen23 am 17 Aug. 2018
Bearbeitet: Stephen23 am 17 Aug. 2018
[zeros(100,5),ones(100,7)]
VIJAY
VIJAY am 17 Aug. 2018
thank you guy but rows are repeated.........

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Stephen23
Stephen23 am 17 Aug. 2018
Bearbeitet: Stephen23 am 17 Aug. 2018

2 Stimmen

R = 100; % rows
C = 12; % columns
N = 5; % number of 1's.
cmb = nchoosek(1:C,N); % all unique column combinations.
idx = randperm(size(cmb,1)); % indices to randomize combinations.
idc = cmb(idx(1:R),:); % (col index) pick first 100 random combinations.
idr = ndgrid(1:R,1:N); % (row index).
mat = ones(R,C); % preallocate output matrix.
mat(sub2ind([R,C],idr,idc)) = 0
Check:
>> all(sum(mat,2)==7) % all rows sum to seven.
ans = 1
>> all(ismember(mat(:),0:1)) % only 0's and 1's.
ans = 1
>> size(unique(mat,'rows')) % all rows are unique.
ans =
100 12

4 Kommentare

VIJAY
VIJAY am 17 Aug. 2018
Your one of the row of your output as follow 1 1 0 0 0 0 1 0 0 1 1 0
I need only 5 zeros in a row others are 1 but here your code work for only 5 ones in a row others are 0
i need 0 instead of 1 in your code.........
Stephen23
Stephen23 am 17 Aug. 2018
Bearbeitet: Stephen23 am 17 Aug. 2018
@VIJAY: just change the zeros to ones, and the last line allocates 0. See my edited answer.
VIJAY
VIJAY am 17 Aug. 2018
thank you .......
Stephen23
Stephen23 am 17 Aug. 2018
@VIJAY: I hope that it helps. Remember to accept the answer. Accepting my answer is the easiest way to thank me.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Rik
Rik am 17 Aug. 2018

2 Stimmen

First generate all combinations, and then select 100 from them:
total_row_length=12;
number_of_zeros=5;
selected_number_of_rows=100;
v=1:total_row_length;
col_positions = nchoosek(v,number_of_zeros);
row_positions=repmat((1:size(col_positions,1))',1,size(col_positions,2));
out=ones(size(col_positions,1),total_row_length);
inds=sub2ind(size(out),row_positions,col_positions);
out(inds)=0;
%select a random sample from all possible rows
selected_rows=randperm(size(out,1),selected_number_of_rows);
result=out(selected_rows,:);

2 Kommentare

Stephen23
Stephen23 am 17 Aug. 2018
Bearbeitet: Stephen23 am 17 Aug. 2018
@Star Strider: can you please give explanations for your votes, rather than just disappearing without comment. I am interested to know what you found in Rik Wisselink's answer, that you felt was missing in mine (they are almost identical). Many thanks!
VIJAY
VIJAY am 20 Aug. 2018
Thank you for answering..........

Melden Sie sich an, um zu kommentieren.

Kategorien

Tags

Gefragt:

am 17 Aug. 2018

Kommentiert:

am 20 Aug. 2018

Community Treasure Hunt

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

Start Hunting!

Translated by