2015-04-22 2 views
0

У меня есть вектор 'row', отлитый как numpy ndarray. Я просто хотел бы сделать его вектор-столбец (меня не волнует этот тип, если он совместим с matplotlib). Вот пример того, что я пытаюсь:Размеры переключателя 1D ndarray

import numpy as np 

a = np.ndarray(shape=(1,4), dtype=float, order='F') 
print(a.shape) 
a.T #I think this performs the transpose? 
print(a.shape) 

Результат выглядит следующим образом:

(1, 4) 
(1, 4) 

Я надеялся получить:

(1, 4) 
(4, 1) 

Может кто-то мне точку в правильное направление? Я видел, что транспонирование в numpy ничего не делает для массива 1D. Но является ли это 1D-массивом?

ответ

2

Транспонирование массива не происходит. Написание a.T создает представление о транспонировании массива a, но это представление затем теряется сразу же, поскольку ему не назначена никакая переменная. a остается без изменений.

Вам нужно написать a = a.T, чтобы связать имя a к транспонированной:

>>> a = a.T 
>>> a.shape 
(4, 1) 

В вашем примере a действительно 2D массив. Транспонирование 1D-массива (с формой (n,)) не меняет этот массив вообще.

0

Возможно, вы не хотите или не нуждаетесь в особом измерении, если только вы не пытаетесь принудительно провести трансляцию.

http://wiki.scipy.org/NumPy_for_Matlab_Users

Вы можете обращаться с рангом-1 массивы в качестве либо строки или столбца векторов. dot(A,v) рассматривает v как вектор-колонку, а dot(v,A) рассматривает v как вектор строки. Это может спасти вас, если вы наберете много транспозиций.

0

Вы можете изменить форму «на месте», которая будет такой же, как a.T для (1,4), но увидеть комментарий г-на Е, нужно ли это. т.е.

... 
print(a.shape) 
a.shape = (4, 1) 
print(a.shape) 
Смежные вопросы