Matrix by Vector multiplication using numpy dot product
In NumPy, I would recommend not thinking too much about "rows" and "columns"
An array in numpy can have any number of dimensions - you can make 1-dimensional, 2-dimensional or 100-dimensional arrays. A 100-dimensional array doesn't have "rows" and "columns" and neither does a 1-dimensional array.
The simple rule for multiplying 1- or 2-dimensional arrays is: the last axis / dimension of the first array has to have the same size as the first axis / dimension of the second array.
So you can multiply:

a (3, ) array by a (3, 2) array
a (3, 2) array by a (2, 3) array
a (2, 3) array by a (3, ) array
I have a matrix m = np.array([[3,4], [5,6], [7,5]]) and a vector v = np.array([1,2]) and these two tensors can be multiplied.
For multiplication of the above two tensors, no. of columns of m must be equal to no. of rows of v
The shapes of m and v are (3,2) and (2,) respectively.
How is the multiplication possible, if m has 3 rows and 2 columns whereas v has 1 row and 2 columns?