help-octave
[Top][All Lists]

## 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

```