it-swarm.com.de

Numpy Matrix zu Array

Ich benutze Numpy. Ich habe eine Matrix mit 1 Spalte und N Zeilen und möchte ein Array mit N Elementen erhalten.

Wenn ich zum Beispiel M = matrix([[1], [2], [3], [4]]) habe, möchte ich A = array([1,2,3,4]) bekommen.

Um dies zu erreichen, benutze ich A = np.array(M.T)[0]. Weiß jemand einen eleganteren Weg, um das gleiche Ergebnis zu erzielen?

Vielen Dank!

122
yassin

Wenn Sie etwas Lesbareres möchten, können Sie Folgendes tun:

A = np.squeeze(np.asarray(M))

Äquivalent können Sie auch Folgendes tun: A = np.asarray(M).reshape(-1), aber das ist etwas weniger lesbar.

165
Joe Kington
105
hpaulj
A, = np.array(M.T)

es hängt davon ab, was Sie mit Eleganz meinen, aber ich würde es gerne tun

13
mvu

Sie können folgende Variante ausprobieren:

result=np.array(M).flatten()
8
bubble
np.array(M).ravel()

Wenn du auf Geschwindigkeit achtest; Aber wenn Sie sich für das Gedächtnis interessieren:

np.asarray(M).ravel()
6
Kevad

Oder Sie könnten versuchen, einige Tempos mit zu vermeiden

A = M.view(np.ndarray)
A.shape = -1
6
Pierre GM

Erstens, Mv = numpy.asarray(M.T), gibt Ihnen ein 4x1-, aber ein 2D-Array.

Führen Sie dann A = Mv[0,:] aus, der Ihnen das gibt, was Sie möchten. Sie könnten sie als numpy.asarray(M.T)[0,:] zusammenstellen.

2
oracleyue

Dadurch wird die Matrix in ein Array umgewandelt 

A = np.ravel(M).T
2
Siraj S.

ravel () und flatten () Funktionen von numpy sind zwei Techniken, die ich hier ausprobieren möchte. Ich möchte gerne die Beiträge von Joe , Siraj , Bubble und Kevad hinzufügen.

Ravel:

A = M.ravel()
print A, A.shape
>>> [1 2 3 4] (4,)

Ebnen:

M = np.array([[1], [2], [3], [4]])
A = M.flatten()
print A, A.shape
>>> [1 2 3 4] (4,)

numpy.ravel() ist schneller, da es sich um eine Funktion auf Bibliotheksebene handelt, die keine Kopie des Arrays anfertigt. Jede Änderung in Array A wird jedoch auf das ursprüngliche Array M übertragen, wenn Sie numpy.ravel() verwenden}.

numpy.flatten() IST LANGSAMER ALS numpy.ravel(). Wenn Sie jedoch numpy.flatten() zum Erstellen von A verwenden, werden Änderungen in A werden nicht in das ursprüngliche Array M übernommen.

numpy.squeeze() und M.reshape(-1) sind langsamer als numpy.flatten() und numpy.ravel().

%timeit M.ravel()
>>> 1000000 loops, best of 3: 309 ns per loop

%timeit M.flatten()
>>> 1000000 loops, best of 3: 650 ns per loop

%timeit M.reshape(-1)
>>> 1000000 loops, best of 3: 755 ns per loop

%timeit np.squeeze(M)
>>> 1000000 loops, best of 3: 886 ns per loop
0