ZK Zhao
ZK Zhao

Reputation: 21573

Matlab: store array in matrix?

I have many array (n*1 dimension), how can I do something like

matrix = [];
for i = 1:5
  for j =1:5
    matrix (i,j) = zeros(n,1); % store a given array to a cell of a matrix 
  end
end

I find Array of Matrices in MATLAB But this is store matrices into array, not the otherwise.

Upvotes: 1

Views: 3077

Answers (2)

Stewie Griffin
Stewie Griffin

Reputation: 14939

Ying Xiong's suggestion is what you want if the vectors are of different lengths. But assuming the number of elements is constant (which they seem to be) you may also use a 3-dimensional array, where each (i,j) element contains a vector in the third dimension, like this:

rows = 5; cols = 5; n = 10;     %// Dimensions
matrix = zeros(rows, cols, n);  %// Initialize matrix
vector = 1:n;                   %// Just an example    
for ii = 1:rows                 %// Bad practice to use i as a variable name 
   for jj = 1:cols              %// Bad practice to use j as a variable name
      matrix(ii,jj,:) = vector; %// Assignment
   end
end

Now each index (i,j) contains the vectors you want, for instance:

squeeze(matrix(1,1,:))
ans =
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10

Having all values in a single matrix can be a good thing if you want to do similar operations on all elements, as vectorized approaches are usually very fast in MATLAB. You might want to check out permute, reshape and functions like bsxfun.

Note that you might be able to vectorize the loops, but without knowing the specifics, that's impossible to know.

Upvotes: 3

Ying Xiong
Ying Xiong

Reputation: 4948

You need to use cell array.

n = 10;
matrix = cell(5,5);
for i = 1:5
  for j = 1:5
    matrix{i,j} = zeros(n,1);
  end
end

Upvotes: 2

Related Questions