Ok I have trouble remembering the code syntax vs math, but I don’t understand the logic behind why none of the below 4 solutions are producing a 5x1 matrix as required.

P = 5x5 matrix
X0 = np.array([[a],[b],[c],[d],[f]])

PX0 returns a 5x5 matrix
X0P also returns a 5x5 matrix

if I rewrite the original format provided for X0 so that:
X0 = np.array([[a, b, c, d, e]])

Then I a 1x5 matrix for X1 regardless if I multiply PX0 or X0P

Thanks I found a textbook that was able to point me in the right direction. I was using the wrong syntax for the multiplication (I was using * instead of @ ) — Can you please remind me what * does in an A*B operation of arrays?