# Making a matrix in a loop in MATLAB 48

Posted by **Doug Hull**,

**Category:**- Format: Video,
- Level: Basic

## 48 CommentsOldest to Newest

**1**of 48

I would use:

b = bsxfun(@plus, a, (0:4).');

**2**of 48

@Oleg,

Thank you, you are right and I can see the advantage to knowing that technique.

I, however, have a hard time internalizing and visualizing that kind of construction. Mentally, it takes me a little longer to figure out what bsxfun does. For small matrices like this, I prefer ease of understanding to terseness of code.

For this case, there is no appreciable performance difference, so it is a matter of taste.

FWIW, I do not make up these cases, virtually everything on this blog comes from user questions. If someone is asking me how to make that matrix, then that tells me they are not ready for bsxfun! I only bring out the more powerful (but harder to understand) techniques for the *advanced* section of this blog.

Thanks,

Doug

**3**of 48

Hi Doug, great and helpful site here!

Here is the beginning of my code;

r2=1 r1=10 a=[r2:r1]; for r2 = r2:r1 G = r2/3; sigrad2 = G*a^2; end

This is just a simplification of a larger code but for the crux of the matter is, the for loop calculates vectors for sigrad2, but I would like to store each of the results in a matrix – I have watched the video where you build a vector with y = i+rand inside the loop but haven’t been able to extend it to my case.

I would then like to plot each of those rows in the resultant matrix against a

Could you please help me in building that matrix? It seems simple but I can’t figure it out

Thanks in advance

**4**of 48

@Ravi

http://blogs.mathworks.com/pick/2007/08/20/matlab-basics-video/

**5**of 48

@dhull

Yeah I mentioned that I saw that video although that only builds a 1×10 vector but I’m not sure how to expand that code to a mxn matrix

**6**of 48

@Ravi,

Add a second loop outside that one that counts across the columns.

Doug

**7**of 48

I have an array

( -0.2429 -0.4420 -0.4997 -0.3964 -0.1646 0.1209 0.3669 0.4935 0.4606 0.2803 0.0114 -0.2601 -0.4483 -0.4933 -0.3796 -0.1425 0.1420 0.3813 0.4970 0.4520 0.2620 -0.0107 -0.2785 -0.4568 -0.4894 -0.3649 -0.1213 0.1642 0.3986 0.5045 0.4467 0.2452 -0.0330 -0.2973 -0.4642 -0.4821 -0.3461 -0.0984 0.1833 0.4087).

I want to call the first 8 elements and find their average, and the next 8 elements and find their average up till the end and in the process form another array with a reduced 5 elements. e.g (a b c d e)

How do i do this in matlab please?

**8**of 48

@Chris,

You would need to pull out the subsets. A for loop would probably work well.

for i:1:8:whatever

do something

end

MEAN is the function to get the mean.

then storing it in a vector:

count = 0

for i = …

count = count+1;

vec(count) = whatever you save

end

-Doug

**9**of 48

You can use the reshape function to make your array a matrix with 8 columns, then use the mean function to calculate the mean of every row. Finally, transpose (‘) to make it a row column:

A=reshape(A,[],8);

mA=mean(A,1);

mA=mA’;

**10**of 48

How would I create a 3 by 3 matrix where each element is equal to the square of the sum of its row and column numbers?

**11**of 48

`for r = 1:3;`

for c=1:3;

m(r,c) = (r+c)^2;

end;

end;

disp(m)

4 9 16

9 16 25

16 25 36

**12**of 48

how to create multidimensional array in a single loop statement?? or how to declare multiple arrays??

**13**of 48

Sir,

you help me a lot. I have a problem and your loop give me a “light on mind” rs

Thanks a lot !

Good work.

**14**of 48

i have two excel files and i am trying to call them in matlab,my aim is to check the value in 1st excel file and accordingly edit second

f=xlsread(‘cbtd.xls’);%/ this file has to be edited later

g=xlsread(‘cbam.xls’);

now i have use two nestd for loops and check a condition that

if g(i)(j)<80 then

f(i)(j)=0

and that excel file named f should be edited

thanks in advance DOUG

**15**of 48

@AMIT: Why do you want to use two for loops? Have a look at this example:

A=magic(5);% Or the matrix from your first Excel file

hv=(A<20); %All elements that are smaller than 20

B=magic(5)*20 %Or the matrix from your second excel file

B(hv)=0;%Change the values of your second file to 0 for which the condition of the first file is true

Of course at the end you need to write B back to the Excel file :-).

**16**of 48

thanks ingrid it worked, now i have another problem , i’ve generated BW image and it has some spots my aim is to calculate area of each spot(white)..

**17**of 48

@AMIT: Have a look at bwarea. Btw. there is always technical support that you can contact.

**18**of 48

function P = legendre(x,n)

P(1) = 1;

P(2) = x;

P(3) = (3*(x^2)- 1)/2;

P =((2.*(n+1)).* x .*(P(n)) – n.*(P(n-1)))./(n+1);

end

test script:

clear legendre;

x = -1;

P = zeros(1,5);

for i = 3:5

P = legendre(x,i);

end

error:

Attempted to access P(4); index out of bounds because numel(P)=3.

Error in legendre (line 7)

P =((2.*(n+1)).* x .*(P(n)) – n.*(P(n-1)))./(n+1);

Error in new_tb (line 6)

P = legendre(x,i);

**19**of 48

hi i need help in finding the average using for loop…

( -0.2429 -0.4420 -0.4997 -0.3964 -0.1646 0.1209 0.3669 0.4935 0.4606 0.2803 0.0114 -0.2601 -0.4483 -0.4933 -0.3796 -0.1425 0.1420 0.3813 0.4970 0.4520 0.2620 -0.0107 -0.2785 -0.4568 -0.4894 -0.3649 -0.1213 0.1642 0.3986 0.5045 0.4467 0.2452 -0.0330 -0.2973 -0.4642 -0.4821 -0.3461 -0.0984 0.1833 0.4087).,in this array of data in first instance it must find average of fist five elements ..2nd time it must find average of (2+3+4+5+6) elements average….third time( 3+4+5+6+7)…like this it must keep on finding average till the end of the array…

**20**of 48

Must to use a loop? Have you written loops before? What do you have so far for code?

**21**of 48

sir i need to find 25*5 column(total of 125) of a matrix. using for loop. everytime 1st column will be incremented and so on..please help me to find out.the above video shows error like” Subscript indices must either be real positive integers or logicals.”

**22**of 48

sir. i am dividing a 210*210 image in to several 3*3 matrices and performing few operations inside each 3*3. i have created a 3*3 matrix and i have put for loops for row and column operations. i need to operate the same kind of operations for next 3*3 and so on. help me.

**23**of 48

Can you paste your code here?

**24**of 48

Algorithm 1 Confusion operation Input: Images Output: Confused Image

for each row ’i’ in the matrix ’I’ do Generate random vector KR for each column ’j’ in the matrix ’I’ do rowsum=rowsum + I [i] [j] end for rowmod=rowsum % 2 if rowmod == 0 then for each KR do I=right circular shift(I) end for else for each KR do I=left circular shift(I) end for end if end for for each column ’j’ in the matrix ’I’ do Generate random vector KC for each row ’i’ in the matrix ’I’ do colsum=colsum + I [i] [j] end for colmod=colsum % 2 if colmod == 0 then for each KC do Iscr=up circular shift(I) end for else for each KC do Iscr=down circular shift(I) end for end if end for

**25**of 48

send coding

**26**of 48

Hello sir, I have equations of motion and i want to form a matrix using these equations by only putting the elements of corresponding function.

As i am new to matlab please guide me how to proceed.

Thanks

**27**of 48

Hi Sachin, I assume you are using MATLAB and not Simulink? Here is one simple example you could start with: http://blogs.mathworks.com/loren/2010/03/25/solving-ordinary-differential-equations/

**28**of 48

How can I generate a random square matrix without using any matlab tools?

**29**of 48

Hi Ken, Do you mean, using MATLAB but not using MATLAB random number functions like rand or randn? If so, can I ask why you would want to do that?

**30**of 48

I want to process image matrix in “for loop” in which first loop should consider the matrix 3* 3 , second loop should consider the matrix 2*2, third loop should consider the matrix 2* 2 and again 3*3 and so on…

i.e.first loop-(1:2,1:3)

second loop-(1:2,4:5)

third loop-(1:2,6:8)

fourth loop-(1:2,9:10) and so on…

Can we able write this as coding in Matlab?

**31**of 48

Hi Sri, Your first loop iteration has 3 columns, the second 2, the third 3 and the forth 2. Is that correct? So the number of columns is 3 for odd iterations and 2 for even? Or did you make a mistake and it should be 2 each time?

**32**of 48

you’re really a good webmaster. The website loading speed is amazing.

It kind of feels that you are doing any unique trick.

Moreover, The contents are masterpiece. you’ve done a magnificent job on this subject!

**33**of 48

I want To add Two matrices in a script file how can i do that. ?? while matrices are been created by using the “for” loop , based on user’s requirement to input matrix of any order.

**34**of 48

What can’t you just use A=B+C ?

**35**of 48

Very goоd article! Wе аre linking to thіs gгeat

article ߋn oᥙr site. Keep uр tҺe great writing.

**36**of 48

can anybody help me out to how to assign array variable to no. of cropped subimages of a image in a for loop?

**37**of 48

Hi Harshini, Can you write some example code to start? I’m not sure I understand what you want.

**38**of 48

I would like to create 500×500 matrix like that [m1 m2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0…… ………………………………..]

[ 0 0 m3 m4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0…… ……………………………….]

[ 0 0 0 0 m5 m6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0…… …………………………….]..

.. …

This is 500×500 matrix like that and I need a loop to construct this matrix in MATLAB.

Thank you

**39**of 48

Hi ezgi, Are m1 and m2 variables? I’d try creating one long row the reshape it. You could start with zeros then index in to assign the variables.

**40**of 48

Impulse =961 by 1 double residual =5142 by 32 double

impulse=impulse(:);

residual=v;

[m,n]=size(v);

HD=[];

%

for i=1:m

for j=1:n

HD = impulse(:).*v(i);

end

end

GHD=zscore(HD);

The problem is with the for loop I get the output for the first column only. So I get HD= p by 1 matrix. I want HD =p by 32 matrix. Currently, my impulses elements are multiplied with elements with the rows for the first column only. What modification should I do here to have all elements of impulse to be multiplied with all other columns just as it does for the first column in this loop. So I just need the same operation executed across all columns of v. What might be the nested loop? Should I use another for loop or a while loop inside..I appreciate your skilled solutions. As you see I am a new user, you are helping a lot.

**41**of 48

Hi

Please help me how I write a*b for this matrix a=[1 u u^2 u^3]

0《u《1

And other matrix b=[1 0 0 0;0 0 1 0;-3 3 -2 -1;2 -2 1 1]

**42**of 48

Hey,

Please how do I use a four loop statement to perform arithmetic operations such as addition, subtraction and multiplication on a 2 multi-dimensional array.

A = [2, 3, 4, 5; 6, 7, 8, 2; 1, 5, 6, 7] & B = [4, 5, 6, 7; 8, 4, 5, 6; 2, 3, 4, 8]

**43**of 48

HI, i trained two-class-classification (svmtrain) with 15 features for 18 images and i have many objects in a single image. I want to save single .mat file of features of these images?my problem is when i run this code i have just the variables of last image!!

for n=n1:n2 (number of images)

for k=1:length(B3) (number of objects in a signle image)

Feat(k,:)=[Area_cellule,Perimeter_cellule,Circularity_cellule,Compactness_cellule, Solidity_cellule,Eccentricity_cellule,MajorAxis_cellule,MinorAxis_cellule, Centroid_cellule,Ampl,Contrast_Cellule,Correlation_Cellule,Energy_Cellule,Homogeneity_Cellule];

end

end

save(‘FeatTrain.mat’, ‘Feat’);

**44**of 48

Hi Braiki, Your Feat variable gets overwritten each n loop. You would need to add another dimension to the matrix to store each image i.e.

Feat(k,:n)=[Area_…. This should work if Feat has the same dimensions for each image. If not, you would need to use a cell array. i.e.

Feat{n}(k:n)=[Area_

**45**of 48

Please how do i create a 100 by 100 matrix that looks like this

[ 1 2 3 4 ….100

2 3 4 5…101

3 4 5 6 …. 102}

and so on

**46**of 48

please tell me how to restructure of broken picture. Please tell me if i can’t restructured the photo r picture i have lost my four years study. please help me

**47**of 48

Hi Oyebee, What have you tried so far?

**48**of 48

Hi Javed, I’m not sure what you mean.Is it related to this post?

## Recent Comments