Python Why Does My Python Matrix Multiplication Code Raise a TypeError?

  • Thread starter Thread starter azerty12
  • Start date Start date
  • Tags Tags
    Error Python
AI Thread Summary
The discussion revolves around troubleshooting a recursive algorithm in Python for matrix multiplication using a divide and conquer approach. The user encounters a TypeError indicating that an 'int' object is not subscriptable when trying to assign a value to an element in a matrix represented as a list. The error arises because, when the size of the matrices is reduced to 1, the matrices A and B are no longer nested lists, leading to failed subscripting attempts. Participants suggest printing the types of A and B to confirm their structure, which reveals that they are indeed lists, but the issue occurs when their dimensions change. The user confirms that this was the underlying problem after receiving assistance.
azerty12
Messages
15
Reaction score
0
Hi all!

I'm learning programming on Python.
Currently, I'm trying to implement a recursive algorithm using a divide and conquer method to compute a product of matrices.

Yet an error occurs when I try to assign an element in a list (representing a matrix)

I can't understand where the problem comes from, since I tried on the shell to enter a matrix exactly as in the program and assign its values (C[0][0]=...) and it works.
But when I try to execute the program, the following error is raised:line 42, in sqmat_mult_rec
C[0][0]=A[0][0]*B[0][0]
TypeError: 'int' object is not subscriptable
Any idea?

(code attached)
 

Attachments

Last edited:
Technology news on Phys.org
Why don't you try printing out A, B and C right before the error occurs? The 'not subscriptable' error usually means that you are trying to look at a subscript that doesn't exist.
 
I tried to and actually each of the objects I try to assign exist...
 
I'm sure they exist, but are they nested lists? When you write A[0][0], it means A must be of the form [[something]]. If A is a simple variable (which is what the message implies) or a simple list [], then you will get an error when you try to access A[0][0]. What does the print out of A and B look like?
 
Try adding
Code:
print(type(A))
print(type(B))
before that call to see what type is getting passed. From the error, A or B are integers.
 
phyzguy said:
I'm sure they exist, but are they nested lists? When you write A[0][0], it means A must be of the form [[something]]. If A is a simple variable (which is what the message implies) or a simple list [], then you will get an error when you try to access A[0][0]. What does the print out of A and B look like?

A and B are nested lists indeed.
They look like A=[[1,2,3],[2,3,4],[2,2,3]] for instance.
But what amazes me is that when I try to work with A[0][0] in the python shell, then there is absolutely no problem whereas with my program (with IDLE) an error is raised...
 
jhae2.718 said:
Try adding
Code:
print(type(A))
print(type(B))
before that call to see what type is getting passed. From the error, A or B are integers.

I get type list
 
Edit: Your problem is that when n is 1, A and B are no longer nested lists.

Then, the subscripting fails because A[0][0] doesn't exist when e.g. A = [1]
 
Last edited:
jhae2.718 said:
Edit: Your problem is that when n is 1, A and B are no longer nested lists.

Then, the subscripting fails because A[0][0] doesn't exist when e.g. A = [1]

sorry for the delay I had no internet access for a while
thank you for your help jhae2.718, it looks like this was the problem indeed!
 
Back
Top