[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Create & Calling list of Matrix name
From: |
Andrew Janke |
Subject: |
Re: Create & Calling list of Matrix name |
Date: |
Fri, 1 Mar 2019 21:57:13 -0500 |
User-agent: |
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:60.0) Gecko/20100101 Thunderbird/60.5.1 |
On 3/1/19 5:39 PM, quocphantruong wrote:
Hello
My problem is about naming and calling set of matrix name using loop
1. Let say I have a large matrix X(100x2). Now I want to cut this matrix
into 20 sub-matrixes and naming them from A1 to A20, each has size(5x2)
2. Then I need to perform some operation hence, need to call out matrix Ai
(for i=1:20) then how should I call them out in loop.
I search and there is some solution:
for i = 1:20
eval (sprintf ("A%d = %d;", i, i));
endfor
Howevever, this seems does not work with matrix. And I dont get how the code
is doing, if you could help me explain that would be great
THank you
Phan
Working with multiple named variables using sprintf() and eval() is only
going to bring you unhappiness. Instead of using 20 variables named A1,
A2, ... A20, try using a single 20-long cell array named A, which you
can index as A{1}, A{2}, ... A{20}.
For example:
X = meshgrid (1:2, 1:100);
n = 20;
A = mat2cell(X, repmat(n, [size(X,1)/n 1]), 2);
Now you can loop over them and do things like:
B = cell (size (A));
for i = 1:numel (A)
B{i} = some_operation (A{i});
endfor
Or, more concisely, use cellfun:
B = cellfun (@(x) {some_operation (x)}, A);
Cheers,
Andrew