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[...,...,...]
.
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.
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)
Pentru tablouri 1D:
a = np.array([1, 2, 3, 4])
a = a.reshape((-1, 1)) # <--- THIS IS IT
print a
array([[1],
[2],
[3],
[4]])
Odată ce ați înțeles că -1 aici înseamnă "cat mai multe rânduri după cum este necesar", am găsi acest lucru să fie mai ușor de citit în mod de "de transpunere" - o matrice. Daca array-ul este de mai mare dimensiune pur și simplu utilizați o.T`.
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
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.
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]])
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
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)
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