2013-10-29 3 views

Antwort

8

Sie können einen Wert an das Ende eines Arrays/Liste mit append oder numpy.append nur anfügen:

# Python list 
a = [1, 2, 3] 
a.append(1) 
# => [1, 2, 3, 1] 

# Numpy array 
import numpy as np 
a = np.array([1, 2, 3]) 
a = np.append(a, 1) 
# => [1, 2, 3, 1] 

Hinweis, wie @BrenBarn wies darauf hin, dass der numpy.append Ansatz jedes Mal eine ganz neue Array erstellt es wird ausgeführt, was es ineffizient macht.

+3

Beachten Sie, dass dies eine ineffiziente Operation ist, da es ein ganz neues Array erstellt. Die schrittweise Erhöhung der Anzahl an Arrays ist kein skalierbarer Ansatz. – BrenBarn

+1

@BrenBarn: Einverstanden, ich habe meine Antwort aktualisiert, um das sofort ersichtlich zu machen. – mdml

+1

'np.append' ist nur ein' np.concatenate'. – hpaulj

2

Ich wette, die Matlab/Octave-Operation macht das gleiche - ein neues Objekt erstellen. Aber ich weiß nicht, ob es etwas wie die Python-ID (a) gibt, um das zu überprüfen.

Ein roher Timing-Test in Octave unterstützt dies - das Erstellen eines großen Arrays durch Anhängen ist langsamer als das Durchlaufen des gesamten Arrays. Beide sind viel langsamer als direkte Zuordnung wie A=1:N

octave:36> t=time; N=1000000; A=[]; A(N)=1; for i=1:N A(i)=i; end; t-time 
ans = -4.0374 
octave:37> t=time; N=1000000; A=[]; for i=1:N A(end+1)=i; end; t-time 
ans = -15.218 

Erweiterung eines Arrays mit (end+1) mehr idiomatische in Javascript als Matlab ist.

+0

In den neuesten Versionen von Matlab ist das JIT manchmal intelligent genug, um dieses Muster zu erkennen und eine Vorabzuordnung vorzunehmen. –

Verwandte Themen