Let's assume my vector is
A = [1 2 3 7 9 10 45 93 122 150]';
I want to put zeros in between these numbers.
A = [1 2 3 0 0 0 7 0 9 10 0 0 .....]';

 Réponse acceptée

Andrei Bobrov
Andrei Bobrov le 20 Jan 2017
Modifié(e) : Andrei Bobrov le 20 Jan 2017

0 votes

One of ways:
A = [1 2 3 7 9 10 45 93 122 150]'
ii = randi(3,numel(A),1);
t = cumsum(ii) < numel(A);
ii = ii(t);
z = arrayfun(@(x)zeros(x,1),ii(1:end-1),'un',0);
C = mat2cell(A(1:sum(ii)),ii,1);
out = [C';[z',{[]}]];
out = cat(1,out{:});

3 commentaires

Deepti Ranjan Majhi
Deepti Ranjan Majhi le 20 Jan 2017
Thank you for your reply. But, I want a vector of length 150X1.
Andrei Bobrov
Andrei Bobrov le 20 Jan 2017
Please!
Deepti Ranjan Majhi
Deepti Ranjan Majhi le 20 Jan 2017
Thank you for reply. I sort out the problem.

Connectez-vous pour commenter.

Plus de réponses (1)

Jan
Jan le 20 Jan 2017
Modifié(e) : Jan le 20 Jan 2017

0 votes

A = [1 2 3 7 9 10 45 93 122 150]';
B = zeros(150, 1);
Index = [true(1, numel(A)), false(1, numel(B) - numel(A)];
Index = Index(randperm(numel(Index));
B(Index) = A;
Now the result is filled at random places by zeros such that the total length is 150.
[EDITED] Easier:
A = [1 2 3 7 9 10 45 93 122 150]';
B = zeros(150, 1);
Index = randperm(numel(B), numel(A));
B(Index) = A;

Catégories

En savoir plus sur Loops and Conditional Statements dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by