According to mathematicians, a dot product or scalar product is an operation that takes two equal-length sequence of numbers (aka vector) and returns a single number (aka scalar). The dot product of vector A with vector B is written symbolically as A • B.
Algebraically, it is the sum of the products of each entry of the sequence (aka elements of vectors). If you have not encountered dot products, this may sound confusing so let’s start with a simple example which you may encounter in daily life. Consider your grocery store bill as such:
Item | Quantity | Unit Cost
Wine | 2 | 12.50
Orange | 12 | 0.50
Muffin | 3 | 1.75
If you can do your grocery bills, you’ll find the total cost of each item and then sum them all up. To find the total cost of each item, you will multiply the Quantity of the item multiplied by its Unit Cost. In other words,
(2*12.50) + (12*0.5) + (3*1.75) = 36.25 . This is known as a weighted sum. At our level, we can also represent a weighted sum as a dot product if we represent Quantity and the Unit Cost as two vectors.
quantity = [2,12,3]
costs = [12.5,.5,1.75]
sum(q*c for q,c in zip(quantity,costs))
A dot product here is the same as adding up all the element-wise multiplied quantity and costs.
Using NumPy for Dot Product
The same thing can be done in NumPy that is easily extendible for more quantities and costs and offer better performance. The same calculation as before with NumPy would be
import numpy as np
quantity = np.array([2,12,3])
costs = np.array([12.5,.5,1.75])
np.sum(quantity*costs) # element-wise multiplication
The calculation is more simply done with NumPy’s
np.dot which can be implemented in three different ways.
quantity.dot(costs) # dot product way 1
np.dot(quantity,costs) # dot product way 2
quantity @ costs # dot product way 3
Multiplying Row and Column Arrays
Special care needs to be taken when dealing with multiplying a row and a column. Consider the 2D arrays called