2013-12-26 2 views

ответ

4

Ваш гс [0] не является матрицей 1x3, это скорее вектор из 3 пунктов:

>>> rc[0].shape 
(3,) 

Закрепите его форму, если вы хотите его транспонировать:

>>> np.reshape(rc[0], (1,3)).T 
array([[0], 
     [0], 
     [1]]) 
+0

Это также разница между 'np.array ([0,1,2,3])' (который является его собственным транспонированием) и 'np.array ([[0,1,2,3]]) '(что, как отмечено в OP, переносится в матрицу 4x1). – lvc

1

Транспонирования на самом деле работает, но не, как вы ожидали, see docs:

По умолчанию обратного размеров

Итак, как ваш массив 1d, реверс ничего не делать с его форма:

>>> np.array([0,0,1]).T.shape 
(3,) 

Вы можете добавить дополнительные размеры с reshape:

>>> np.array([0,0,1]).reshape(-1,1,1).shape 
(3, 1, 1) 

Теперь нетривиальная форма может быть обратным:

>>> np.array([0,0,1]).reshape(-1,1,1).T.shape 
(1, 1, 3) 
2

Одна из первых вещей, которые я прошу, когда сталкивается с проблемой, как это: а какая форма?

In [14]: rc.shape 
Out[14]: (4, 3) 

In [15]: rc[0].shape 
Out[15]: (3,) 

Индексирование выбрало ряд и уменьшило количество измерений.

Но если индекс I со списком (или массива), то результат будет 2d

In [16]: rc[[0]].shape 
Out[16]: (1, 3) 
In [19]: v_x.shape 
Out[19]: (1, 4) 

Есть другие способы получения этой формы, или даже цель (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 подкласс np.array, который всегда 2d (даже после индексации с скаляр)

rcm = np.matrix(rc) 
rcm[0] # (1,3) 
rcm[0].T # (3,1) 

np.matrix может облегчить переход, если вы едете в numpy из MATLAB, особенно старые версии где все было 2d-матрицей. Для других, вероятно, лучше ознакомиться с ndarray и использовать matrix, только если он добавит некоторые функции.

Смежные вопросы