How to convert a matrix into a 3d matrix
Show older comments
Hi i have a function that is creating a matrix. How do i create a vector that takes this matrix and adds n dimensions to it, i.e makes it 3d???
3 Comments
sixwwwwww
on 11 Dec 2013
do you just want to replicate it N times?
Jos (10584)
on 11 Dec 2013
What do you exactly mean by "a vector that takes this matrix and adds n dimensions"?
Tip: if English is a problem when you're not a native speaker (like me), a question is often clarified by adding a short example.
Image Analyst
on 11 Dec 2013
Do you mean "a function" instead of "a vector"???
Accepted Answer
More Answers (3)
Image Analyst
on 11 Dec 2013
Edited: Image Analyst
on 11 Dec 2013
If you're in a loop, you can do
for k = 1 : numberOfLoopIterations
thisMatrix = yourFunction();
if k == 1
% Start it/initialize it.
matrix3D = thisMatrix;
else
% Append this matrix in 3D to the "master" one.
matrix3D = cat(3, matrix3D, thisMatrix);
end
end
5 Comments
Giovanni
on 11 Dec 2013
Image Analyst
on 11 Dec 2013
matrix3D is the 3D matrix you're building up, iteration by iteration by appending new 2D matrices to it. I am not assigning it on both sides. I'm using it on the right to make a new one on the left.
Giovanni
on 11 Dec 2013
Giovanni
on 11 Dec 2013
Image Analyst
on 11 Dec 2013
No, the array must be rectangular. You can't have any "ragged" edges. If you need that, then you need to use cell arrays, which is a lot more complicated). See http://matlab.wikia.com/wiki/FAQ#What_is_a_cell_array.3F
Walter Roberson
on 12 Dec 2013
As you asked the question again, I will repeat what Image Analyst said, but with different wording:
In order to combine vectors unchanged into a numeric matrix, the vectors must all be the same length. There is no way to overcome this limitation in a numeric matrix.
You can chop all the vectors down to the same length, by throwing away information. After that you can use cat() to combine them into a numeric matrix.
You can extend the short vectors with some value (such as 0 or inf or NaN) so that the vectors are all the same length. After that you can use cat() to combine them into a numeric matrix.
Now another option: if you have several vectors of coordinates (such as time) and corresponding values, then you can determine some "representative" coordinates and use interp1() to interpolate the values at the representative coordinates, for each vector. After that you can use cat() to combine the interpolated values into a numeric matrix. For example:
L1 = length(v1); L2 = length(v2); L3 = length(v3);
new_L = mean([L1, L2, L3]); %number of points we will interpolate at
all_v = vertcat(v1(:), v2(:), v3(:)); %combine all of the vectors
minv = min(all_v);
maxv = max(all_v);
new_v = linspace(minv, maxv, new_L); %equally spaced values between the min and max
new_y1 = interp1(v1, y1, new_v);
new_y2 = interp1(v2, y2, new_v);
new_y3 = interp1(v3, y3, new_v);
combined_y = vertcat(new_y1(:), new_y2(:), new_y3(:));
plot(new_v, combined_y)
Categories
Find more on Loops and Conditional Statements in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!