Hi, I have a a 1 x N matrix of numbers. For example, a matrix T:
T = [1 4 7]
I would like to convert T to the new matrix as follows:
T_new = [1 2 3 4 5 6 7 8 9]
Basically, each element of T is replaced by an arithmetic series of 3 values with that element as the starting element and common difference = 1.
I tried
T_new = [T:T+3];
But it only updates the first element (I get T_new = [1 2 3 4]). Is there any quick way to do this without using a for loop ?
Thanks.

 Réponse acceptée

>> T = [1,4,7];
>> cell2mat(arrayfun(@(n)n+(0:2),T,'uni',0))
ans =
1 2 3 4 5 6 7 8 9

Plus de réponses (2)

Andrei Bobrov
Andrei Bobrov le 25 Avr 2017
Modifié(e) : Andrei Bobrov le 25 Avr 2017
T_new = reshape(T(:)' + (0:2)',1,[])

3 commentaires

There is an error in the above code. But I get the idea. The below code works:
reshape(repmat(T,numel(T),1) + repmat((0:2)',1,numel(T)),1,[])
You are using an older version of MATLAB.
Variant for you:
T_new = reshape(bsxfun(@plus,T(:)',(0:2)'),1,[])
Yup, this works. Thanks !

Connectez-vous pour commenter.

dbmn
dbmn le 25 Avr 2017
One possible solution would be:
0. having
T = [1 4 7];
1. create a temporary matrix T_temp that looks like (this could be done in a loop very easily)
T_new = [1 2 3;
4 5 6;
7 8 9 ];
2. then reshape that matrix using
T_new=reshape(T_tmp', 1, numel(T_tmp));
1 2 3 4 5 6 7 8 9

1 commentaire

Varun Nair
Varun Nair le 25 Avr 2017
Modifié(e) : Varun Nair le 25 Avr 2017
Thanks, but, as I mentioned in the question, I was looking for a way to do it without using a for loop (i.e. without having to loop through all elements).

Connectez-vous pour commenter.

Catégories

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

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by