add elements to a matrix
Mostrar comentarios más antiguos
I want to define a 20*100 matrix and add elements to it row by row. I divide a pitcture to 20 blocks containing 15360 pixels and get average value of H of the blocks. The code is shown below:
Hsv = rgb2hsv(mov);
H = Hsv(:, :, 1);
H = reshape(H, 120, 4, 128, 5);
blockMean = 255*reshape(sum(sum(H, 1), 3), 4, 5) / 15360;
blockArea = reshape(blockMean, 1, 20);
Now I need to get blockArea of 100 pictures and add them into a 20*100 matrix. How can I achieve it?
Respuestas (2)
Azzi Abdelmalek
el 3 de Oct. de 2012
If your are asking about vertical concatenation
out=[]
for k=1:10
A=rand(5,5)
out=[out;A]
end
6 comentarios
Xiaochao
el 4 de Oct. de 2012
Walter Roberson
el 4 de Oct. de 2012
See fliplr() and flipud()
Azzi Abdelmalek
el 4 de Oct. de 2012
Editada: Azzi Abdelmalek
el 4 de Oct. de 2012
or try this (switch out=[out;A] to out=[A;out])
out=[]
for k=1:10
A=rand(5,5)
out=[A;out]
end
Jan
el 4 de Oct. de 2012
Pre-allocate!
Azzi Abdelmalek
el 4 de Oct. de 2012
Then the code will change
m=10;n=5
out=zeros(m*n,n)
for k=1:m
A=rand(n)
out(m*n-k*5+1:m*n-(k-1)*n,:)=A;
end
Xiaochao
el 4 de Oct. de 2012
Jan
el 4 de Oct. de 2012
out = zeros(100, 20); % Pre-allocation
for k = 1:10
A = rand(1, 20);
out(k, :) = A;
end
Pre-allocation is essential. When the array grow in each iteration, you do not allocate for 100*20*8 bytes, but:
sum(1:100) * 20 * 8 bytes
And these are 808kB already.
1 comentario
Xiaochao
el 4 de Oct. de 2012
Categorías
Más información sobre Matrices and Arrays en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!