One of the first things I ask when confronted with a problem like this is: what's the shape?
In [14]: rc.shape
Out[14]: (4, 3)
In [15]: rc[0].shape
Out[15]: (3,)
Indexing has selected a row, and reduced the number of dimensions.
But if I index with a list (or array), the result is 2d
In [16]: rc[[0]].shape
Out[16]: (1, 3)
In [19]: v_x.shape
Out[19]: (1, 4)
There are other ways of getting that shape, or even the target (3,1).
rc[0].reshape(1,-1) # -1 stands in for the known 3
rc[0][np.newaxis,:] # useful when constructing outer products
rc[0].reshape(-1,1) # transposed
rc[0][:,np.newaxis]
np.matrix is a subclass of np.array that is always 2d (even after indexing with a scalar)
rcm = np.matrix(rc)
rcm[0] # (1,3)
rcm[0].T # (3,1)
np.matrix can ease the transition if you are coming to numpy from MATLAB, especially the older versions where everything was a 2d matrix. For others it is probably better to become familiar with ndarray, and use matrix only if it adds some functionality.