Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Removing third dimension of matrix

Tags:

matlab

Lets say I have matrix such that A(:,:,1)=[1,2,3;2,3,4], A(:,:,2)=[3,4,5;4,5,6].

How is the easiest way of accessing and plotting the vectors (1,2,3),(2,3,4),(3,4,5),(4,5,6). I tried creating B=[A(:,:,1);A(:,:,2)], but i need a procedure to arbitrary number of A's.

Hope this isn't trivial and I've formulated myself satisfactory.

like image 928
htd Avatar asked Dec 10 '13 15:12

htd


People also ask

How do you remove an element from a matrix?

The easiest way to remove a row or column from a matrix is to set that row or column equal to a pair of empty square brackets [] . For example, create a 4-by-4 matrix and remove the second row.

How do you remove a dimension from a matrix in MATLAB?

Description. B = squeeze( A ) returns an array with the same elements as the input array A , but with dimensions of length 1 removed. For example, if A is a 3-by-1-by-1-by-2 array, then squeeze(A) returns a 3-by-2 matrix.

Can you change the size of a matrix?

You can expand the size of any existing matrix as long as doing so does not give the resulting matrix an irregular shape. (See Keeping Matrices Rectangular). For example, you can vertically combine a 4-by-3 matrix and 7-by-3 matrix because all rows of the resulting matrix have the same number of columns (3).

How do you delete a line in MATLAB?

You can use any point to the right of that point along the same x-axis to delete the line.


1 Answers

You should think 'vertically'. This will allow you to use colon indexing:

>> A(:,:,1) = [1,2,3;2,3,4].'; %'// NOTE: transpose of your original
>> A(:,:,2) = [3,4,5;4,5,6].'; %'// NOTE: transpose of your original
>> A(:,:)
ans =
    1     2     3     4
    2     3     4     5
    3     4     5     6

The colon indexing with two colons works for any dimension A:

>> A(:,:,:,:,1,1) = [1 2 3; 2 3 4].';   %'
>> A(:,:,:,:,2,1) = [3 4 5; 4 5 6].';   %'
>> A(:,:,:,:,1,2) = [5 6 7; 6 7 8].';   %'
>> A(:,:,:,:,2,2) = [7 8 9; 8 9 0].';   %'
>> A(:,:)
ans =
     1     2     3     4     5     6     7     8
     2     3     4     5     6     7     8     9
     3     4     5     6     7     8     9     0

Colon indexing in MATLAB is quite interesting and really powerful once you master it. For example, if you use fewer colons than there are dimensions in the array (like above), MATLAB will automatically concatenate the remainder of the data along the dimension equal to the colon count.

So, if A has 48 dimensions, but you index with just 2 colons: you'll get a 2D array, that is the concatenation of the remaining 46 dimensions along the 2nd dimension.

In general: if A has N dimensions, but you index with just M ≤ N colons: you'll get an M-D array, that is the concatenation of the remaining N-M dimensions along the Mth dimension.

So as long as you are free to define your A to contain vectors on the columns rather than the rows (you should advise everyone to do this, as virtually everything in MATLAB is a bit faster that way), I think this is the fastest and most elegant way to do what you want.

If not, well, then just reshape like Dan :)

like image 113
Rody Oldenhuis Avatar answered Nov 09 '22 06:11

Rody Oldenhuis