help-octave
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]