# Need only the final result of for loop Suppose I want to increase each off diagonal element of a matrix by 1. Myy program gives me a sequence of matrices each time changing only one entry. I just need the final matrix of the sequence. Please check the following program. What modification is required so that the program changes all the entries at a time?

A=random_matrix(QQ,5,5)
B=copy(A)
for i in range(A.nrows()):
for j in range(A.nrows()):
if i!=j:
B[i,j]=A[i,j]+1
print A,B

edit retag close merge delete

Sort by » oldest newest most voted

The question was strictly asking how to perform all add-one operations at once. (That print command was of course misplaced in the inner most loop.)

An answer constructs the B-copy already with the right entries. For me works best:

A = random_matrix( QQ, 5, 5 )
B = matrix( QQ, 5, 5, [ A[n,k]+1 for n in range(5) for k in range(5) ] )
print A
print B

more

Is it homework ? If yes, you should learn about indentation in Python (hence Sage).

more

Thank you for your response. I have recently started learning sage(python). But what I know is, if indentations were not appropriate, there would be some error while running my code? Is it? My program ran succesfully, the only problem I have is that it is giving me a lot of unnecessary outputs.

You got a broad hint: it's a matter of indentation. Change the level of indentation of the print statement and see what happens.