Replacing each array element with a series of values

1 Ansicht (letzte 30 Tage)
Varun Nair
Varun Nair am 25 Apr. 2017
Kommentiert: Varun Nair am 29 Apr. 2017
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.

Akzeptierte Antwort

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

Weitere Antworten (2)

Andrei Bobrov
Andrei Bobrov am 25 Apr. 2017
Bearbeitet: Andrei Bobrov am 25 Apr. 2017
T_new = reshape(T(:)' + (0:2)',1,[])
  3 Kommentare
Andrei Bobrov
Andrei Bobrov am 26 Apr. 2017
You are using an older version of MATLAB.
Variant for you:
T_new = reshape(bsxfun(@plus,T(:)',(0:2)'),1,[])
Varun Nair
Varun Nair am 29 Apr. 2017
Yup, this works. Thanks !

Melden Sie sich an, um zu kommentieren.


dbmn
dbmn am 25 Apr. 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 Kommentar
Varun Nair
Varun Nair am 25 Apr. 2017
Bearbeitet: Varun Nair am 25 Apr. 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).

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Multidimensional Arrays finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by