Why Does My Python Matrix Multiplication Code Raise a TypeError?

  • Context: Python 
  • Thread starter Thread starter azerty12
  • Start date Start date
  • Tags Tags
    Error Python
Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
8 replies · 4K views
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:
Physics 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 [itex]n[/itex] 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 [itex]n[/itex] 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!