Transpunerea unei matrice NumPy

Eu folosesc Python și NumPy și au unele probleme cu "transpune":

import numpy as np
a = np.array([5,4])
print(a)
print(a.T)

Invocarea o.T nu este de transpunere a unei matrice. Dacă " a " este, de exemplu, [[], []], apoi se transpune în mod corect, dar am nevoie de transpunerea a[...,...,...].

Comentarii la întrebare (1)
Soluția

L's de lucru exact ca's ar trebui. Transpusa unei 1D matrice este încă un 1D matrice! (Daca're folosit pentru matlab, fundamental nu't au un concept de o 1D array. Matlab's "1D" matrice sunt 2D.)

Dacă vrei să-ți transformi 1D vector într-o matrice 2D și apoi de a o transpune, doar felie cu np.newaxis(sau "Nici unul", au're la fel,newaxis` este doar mai ușor de citit).

import numpy as np
a = np.array([5,4])[np.newaxis]
print(a)
print(a.T)

În general, deși, nu't vreodată nevoie să vă faceți griji despre asta. Adăugarea dimensiune suplimentară este, de obicei, nu ceea ce vrei, daca're doar o face din obișnuință. Numpy automat va difuza un 1D array când fac diverse calcule. Nu's, de obicei, nu este nevoie să se facă distincția între un vector rând și un vector coloană (de care nici nu sunt vectors. Ei're atât 2D!) atunci când doriți doar un vector.

Comentarii (7)

Utilizați două suportul de perechi în loc de una. Acest lucru creează o matrice 2D, care poate fi transpus, spre deosebire de 1D array creați dacă utilizați un suport pereche.

import numpy as np    
a = np.array([[5, 4]])
a.T

Mai aprofundată exemplu:

>>> a = [3,6,9]
>>> b = np.array(a)
>>> b.T
array([3, 6, 9])         #Here it didn't transpose because 'a' is 1 dimensional
>>> b = np.array([a])
>>> b.T
array([[3],              #Here it did transpose because a is 2 dimensional
       [6],
       [9]])

Utilizarea numpy's "forma" metoda de a vedea ce se întâmplă aici:

>>> b = np.array([10,20,30])
>>> b.shape
(3,)
>>> b = np.array([[10,20,30]])
>>> b.shape
(1, 3)
Comentarii (1)

Pentru tablouri 1D:


a = np.array([1, 2, 3, 4])
a = a.reshape((-1, 1)) # 
Comentarii (5)

Puteți converti un existent vector într-o matrice de ambalaj-l într-un extra set de paranteze drepte...

from numpy import *
v=array([5,4]) ## create a numpy vector
array([v]).T ## transpose a vector into a matrix

numpy, de asemenea, are o matrix clasă (a se vedea matrice vs matrix)...

matrix(v).T ## transpose a vector into a matrix
Comentarii (0)

numpy 1D array --> coloana/rând matrice:

>>> a=np.array([1,2,4])
>>> a[:, None]    # col
array([[1],
       [2],
       [4]])
>>> a[None, :]    # row, or faster `a[None]`
array([[1, 2, 4]])

Și ca @joe-kington spus, puteți înlocui "Nici unul" cu `np.newaxis pentru lizibilitate.

Comentarii (0)

La 'transpune' un 1d array de la un 2d coloană, puteți utiliza numpy.vstack:

>>> numpy.vstack(numpy.array([1,2,3]))
array([[1],
       [2],
       [3]])

De asemenea, funcționează pentru vanilie liste:

>>> numpy.vstack([1,2,3])
array([[1],
       [2],
       [3]])
Comentarii (3)

Poți doar să transpună o matrice 2D. Puteți folosi numpy.matrice pentru a crea o matrice 2D. Acest lucru este de trei ani mai târziu, dar eu sunt doar adăugarea la set de posibile soluții:

import numpy as np
m = np.matrix([2, 3])
m.T
Comentarii (1)

O alta solutie.... :-)

import numpy as np

a = [1,2,4]

[1, 2, 4]

b = np.array([a]).T

array([[1], [2], [4]])

Comentarii (1)

Eu sunt doar consolidarea postul de mai sus, sper că va ajuta pe alții să salvați ceva timp:

Mai jos matrice a (2, )dimensiune, l's 1-D matrice,

b_new = np.array([2j, 3j])  

Există două moduri de a transpune o 1-D matrice:


felie cu "np.newaxis" sau nici unul.!

print(b_new[np.newaxis].T.shape)
print(b_new[None].T.shape)

alt mod de a scrie, de mai sus, fără " T " operațiune.!

print(b_new[:, np.newaxis].shape)
print(b_new[:, None].shape)

Ambalaj [ ] sau folosind np.matrix, înseamnă adăugând o nouă dimensiune.!

print(np.array([b_new]).T.shape)
print(np.matrix(b_new).T.shape)
Comentarii (0)

Transpusa de

x = [[0 1],
     [2 3]]

este

xT = [[0 2],
      [1 3]]

ei bine, codul este:

x = array([[0, 1],[2, 3]]);
np.transpose(x)        

acest link pentru mai multe informații:

http://docs.scipy.org/doc/numpy/reference/generated/numpy.transpose.html

Comentarii (0)

în loc să utilizați arr[:,Nici unul] pentru a crea vector coloană

Comentarii (0)

Ca unele dintre comentariile de mai sus, transpusa de tablouri 1D sunt tablouri 1D, deci, un mod de a transpune un 1D array ar fi pentru a converti matrice cu o matrice astfel:

np.transpose(a.reshape(len(a), 1))
Comentarii (0)

Numele funcției în numpy este column_stack.

>>>a=np.array([5,4])
>>>np.column_stack(a)
array([[5, 4]])
Comentarii (0)