Numpy Tranpose Explained


(n,) vs. (n, 1)

Numpy arrays are set up so 0D arrays are scalars, 1D arrays are vectors, 2D arrays are matrices (and the linear map associated with them), and higher dimensional arrays are unimportant for this post.

This can be seen from the length of np.array(...).shape. np.array(1).shape is (), a zero length tuple, np.array([1]).shape is a length one tuple, and you get the idea from there.

Transposing

The transpose of a 1D array of shape (n,) is still a 1D array of the same shape, rather than a 2D array of shape (1,n). In other words, transposing 1D arrays doesn’t do anything.

This will only really make sense if you understand the transpose and its relationship to dual spaces.

Numpy uses the transpose only to express the transpose of a linear map, not as a handy way to get a linear functional (vector in the dual space) from your vector1. To do that, you have to explicitly make your vector into a linear map (of shape (n,1)) with reshape and then transpose.

In this way, Numpy draws a sharp line between vectors and the linear maps acting on them. All isomorphisms that allow you to conflate the two don’t fly in Numpy, so you’ll have to do the conversions explicitly2.

  1. Under the dual basis induced by whichever one you’re using to represent your original vector. 

  2. Which I’m personally a fan of when programming. 

Related Posts

Middle School by Bo Burnham

How to Disable Disqus Ads on your Blog

Derivation of Reservoir Sampling

Fun with Python Iterators: Linked Lists Made Easy

Notes for November 11, 2018

Underrated Vim Option: undofile and undodir

Hot Take on Solo Travel: Starve

Alan Perlis

Book Notes: The Map of My Life by Goro Shimura

Prague