Python 3, an Illustrated Tour Transcripts
Chapter: Classes and inheritance
Lecture: Matrix Multiplication

Login or purchase this course to watch this video and the rest of the course contents.
0:00 Pep 465 introduced what's called the matrix multiplication operator
0:05 this came out in Python 3.5,
0:07 from the pep we read: in numerical code there are two important operations,
0:12 which compete for use of Python's asterisk operator
0:15 element wise multiplication and matrix multiplication.
0:19 Here's an example of doing matrix multiplication.
0:23 If you're familiar with linear algebra, this is a common operation.
0:26 Here I'm importing the numpy library and I'm creating 2 arrays
0:30 and then I'm looping over the pairs of elements and multiplying them together
0:35 and summing the result.
0:37 This is doing what's called matrix multiplication.
0:40 It gives me in this case 285 as the result.
0:43 This pep introduced an operation to do that
0:45 and we can use the @ sign around the two arrays
0:49 and that also gives us the same result 285.
0:52 Note that this is different than multiplication,
0:55 if we simply multiply the array in numpy
0:58 this is going to do what is called element wise multiplication
1:01 and in that case, it will multiply every element in the array by 10,
1:05 it won't do multiplication of the whole element by 10 per se.
1:11 If you want to have a class that implements matrix multiplication
1:15 you just need to implement the __matmul__ operator.
1:20 Again, in Python, everything is an object and there are various protocols
1:24 and if we follow certain protocols, we can take advantage of certain behavior.
1:27 In this case, if we want to be able to use the @ sign
1:31 we can Implement __matmul__.
1:33 This case is pretty dumb example
1:35 it simply ignores the other that's passed in there and returns 42,
1:40 but you could do something more smart if you want to.
1:42 If you're not familiar with dunder methods
1:45 what's happening is self here would be a and b would come in as other
1:51 and so inside of that method there, you could do whatever you wanted to
1:55 with them and you could Implement that operation.