Azzera filtri
Azzera filtri

add elements to a matrix

28 visualizzazioni (ultimi 30 giorni)
Xiaochao
Xiaochao il 3 Ott 2012
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?

Risposte (2)

Azzi Abdelmalek
Azzi Abdelmalek il 3 Ott 2012
If your are asking about vertical concatenation
out=[]
for k=1:10
A=rand(5,5)
out=[out;A]
end
  6 Commenti
Azzi Abdelmalek
Azzi Abdelmalek il 4 Ott 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
Xiaochao il 4 Ott 2012
thank you very much. I learn a lot from you guys.

Accedi per commentare.


Jan
Jan il 4 Ott 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.

Categorie

Scopri di più su Matrices and Arrays in Help Center e File Exchange

Tag

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by