2016-07-30 26 views
2

Ich habe eine Funktion, die eine Liste zurückgibt. Ich denke, ich np.append in einem Array diese Liste als neue Zeile einzufügen, meine Absicht ist, wie folgt:Visualisierung eines numpy Array/Matrix

list = 4 5 6 

b = 1 2 3 
b = np.append(b, list) 

Ausgang;

1 2 3 
4 5 6 

Dies ist nicht der Code, den ich verwende (es gibt eine Menge Unsinn dazwischen). Aber der Ausgang ich erhalte, ist dies:

2016-06-01 PRINT [ 99.86   99.928  99.9   99.875  99.8   89.7933 
    97.60018333 98.903  99.928   0.2801201 98.95   98.93 
    98.87   98.94   99.05   89.097  97.6712  98.87 
    99.59   0.23538903 99.711  99.732  99.725  99.724 
    99.769  89.777  98.12053333 99.68   99.88 
    0.30333219 99.805  99.79   99.743  99.71   99.69 
    89.7728  98.06653333 99.617  99.82   0.28981292 
    99.882  99.879  99.865  99.84   99.9   89.9206 
    98.29823333 99.82  100.08   0.31420778] 

Ist das eine 10-Säule von 5 Zeile Array/Matrix oder ist dies ein 50 Spalte/Zeile-Array? Ich fühle mich, als würde ich hier etwas übersehen - oder ist es nur, dass die Ausgabe nicht wirklich die Form des Arrays zeigt?

+0

W gibt hy nicht die Form des Arrays aus numpy, z. 'b.form 'Ref: [numpy.darray.shape] (http://docs.scipy.org/doc/numpy/reference/generated/numpy.narray.shape.html) – davedwards

+0

Ich sehe nur einen Satz von '[]' - also ist es 1d, ein 1d 50 Element Array . Wie Ihr kurzgeschlossenes 6-Elemente-Array. – hpaulj

Antwort

3

Wahre Liste append:

In [701]: alist = [4,5,6] 
In [702]: b=[1,2,3] 
In [703]: b.append(alist) 
In [704]: b 
Out[704]: [1, 2, 3, [4, 5, 6]] 

schlecht Array-Betrieb:

In [705]: anArray=np.array([4,5,6]) 
In [706]: b=np.array([1,2,3]) 
In [707]: b=np.append(b,anArray) 
In [708]: b 
Out[708]: array([1, 2, 3, 4, 5, 6]) 
In [709]: b.shape 
Out[709]: (6,) 

Here I verketteten nur anArray auf b, eine längere Reihe zu machen.

Ich habe das schon gesagt - np.append ist keine gute Funktion. Es sieht zu sehr nach der Liste aus append, und Leute enden damit, es zu missbrauchen. Entweder verpassen sie die Tatsache, dass sie ein neues Array zurückgibt, im Gegensatz zum direkten Ändern. Oder sie benutzen es wiederholt.

Hier ist der bevorzugte Weg von Listen oder Arrays zu sammeln und sie in eine

In [710]: alist = [] 
In [711]: b=np.array([1,2,3]) # could be b=[1,2,3] 
In [712]: alist.append(b) 
In [713]: b=np.array([4,5,6]) # b=[4,5,6] 
In [714]: alist.append(b) 
In [715]: alist 
Out[715]: [array([1, 2, 3]), array([4, 5, 6])] 
In [716]: np.array(alist) 
Out[716]: 
array([[1, 2, 3], 
     [4, 5, 6]]) 
In [717]: _.shape 
Out[717]: (2, 3) 

Das Ergebnis ist ein 2D-Array verbindet. Die Liste append ist viel schneller als das Array append (was eine echte Array-Verkettung ist). Erstellen Sie die Liste und erstellen Sie das Array.

Der gebräuchlichste Weg, ein 2D-Array zu definieren, ist mit einer Liste der Listen:

In [718]: np.array([[1,2,3],[4,5,6]]) 
Out[718]: 
array([[1, 2, 3], 
     [4, 5, 6]]) 

np.concatenate Eine andere Option ist für Arrays und Listen verbindet. Wenn Sie mehr Kontrolle darüber haben, wie sie verbunden sind, müssen Sie jedoch auf die Dimensionen der Eingaben achten (Sie sollten diese sowieso beachten).

Es gibt mehrere 'Stack' Funktionen, die die Dimension der Handhabung ein wenig zu straffen, stack, hstack, vstack und ja, append. Es lohnt sich, sich ihren Code anzusehen.

+0

Ich glaube, du hast 'np.array' an einer Stelle gesagt, wo du' np.append' meintest. – user2357112

+0

Sie haben Recht. Korrigiert. – hpaulj

1

sollten Sie hstack oder vstack

import numpy as np 
a = np.array([1, 2, 3]) 
b = np.array([4, 5, 6]) 
np.vstack((a,b)) 

array([[1, 2, 3], 
     [4, 5, 6]]) 

oder

np.hstack((a,b)) 

gibt

array([1, 2, 3, 4, 5, 6])