Store matrices under different variable names within a loop?

8 次查看(过去 30 天)
I have a 4 by 16 matrix, say mat, and it can be random for this example. I would like to convert it into four seperate 4 by 4 matricies, where the first row of mat is reshaped into the first 4 by 4 matrix.
At the moment I have this code...
mat = randi([0, 9], [4,16])
for k = 1:size(mat,1)
vec = mat(k,:);
A = reshape(vec,[4,4]);
end
This achieves what I would like it to, however it stores all four of the matricies under A, so after it has run I can only access the fourth matrix.
Is there an efficient way to title the four matricies seperately so I can access them all?
  1 个评论
Stephen23
Stephen23 2020-4-5
"Is there an efficient way to title the four matricies seperately so I can access them all?"
Yes, by allocating them explicitly to four variables:
A = ...
B = ...
C = ...
D = ...
Although some beginners use assignin, evalin, eval etc., none of these are efficient. Your basic concept of dynamically defining variable names is fundementally inefficient, slow, obfuscated, liable to bugs, and difficult to debug.
Usually the best solution is to NOT split up data, but to use MATOLAB efficient indexing, grouping, etc. methods.

请先登录,再进行评论。

采纳的回答

Les Beckham
Les Beckham 2020-4-5
编辑:Les Beckham 2020-4-5
Make A a 4x4x4 three-dimensional matrix instead of creating multiple 4x4 matrices:
mat = randi([0, 9], [4,16])
A = zeros(4,4,4); % allocate space for A and set the size
for k = 1:size(mat,1)
vec = mat(k,:);
A(:,:,k) = reshape(vec,[4,4]);
end
A % check results
Note that if you want the elements in the rows of A to be filled from mat in order, instead of filling first into the columns of A, transpose the output of the reshape command like this:
A(:,:,k) = reshape(vec,[4,4])';
Experiment to make sure you get what you want/expect.
  4 个评论
Ashton Linney
Ashton Linney 2020-4-5
I ran into problems down the line when using assignin within appdesigner and used your method instead. It worked great! Thank you :)

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Resizing and Reshaping Matrices 的更多信息

产品


版本

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by