2016-03-11 17 views
8

Qual è la differenza tra NumPy append e concatenate?NumPy append vs concatenato

La mia osservazione è che concatenate è un po 'più veloce e append appiattisce l'array se l'asse non è specificato.

In [52]: print a 
[[1 2] 
[3 4] 
[5 6] 
[5 6] 
[1 2] 
[3 4] 
[5 6] 
[5 6] 
[1 2] 
[3 4] 
[5 6] 
[5 6] 
[5 6]] 

In [53]: print b 
[[1 2] 
[3 4] 
[5 6] 
[5 6] 
[1 2] 
[3 4] 
[5 6] 
[5 6] 
[5 6]] 

In [54]: timeit -n 10000 -r 5 np.concatenate((a, b)) 
10000 loops, best of 5: 2.05 µs per loop 

In [55]: timeit -n 10000 -r 5 np.append(a, b, axis = 0) 
10000 loops, best of 5: 2.41 µs per loop 

In [58]: np.concatenate((a, b)) 
Out[58]: 
array([[1, 2], 
     [3, 4], 
     [5, 6], 
     [5, 6], 
     [1, 2], 
     [3, 4], 
     [5, 6], 
     [5, 6], 
     [1, 2], 
     [3, 4], 
     [5, 6], 
     [5, 6], 
     [5, 6], 
     [1, 2], 
     [3, 4], 
     [5, 6], 
     [5, 6], 
     [1, 2], 
     [3, 4], 
     [5, 6], 
     [5, 6], 
     [5, 6]]) 

In [59]: np.append(a, b, axis = 0) 
Out[59]: 
array([[1, 2], 
     [3, 4], 
     [5, 6], 
     [5, 6], 
     [1, 2], 
     [3, 4], 
     [5, 6], 
     [5, 6], 
     [1, 2], 
     [3, 4], 
     [5, 6], 
     [5, 6], 
     [5, 6], 
     [1, 2], 
     [3, 4], 
     [5, 6], 
     [5, 6], 
     [1, 2], 
     [3, 4], 
     [5, 6], 
     [5, 6], 
     [5, 6]]) 

In [60]: np.append(a, b) 
Out[60]: 
array([1, 2, 3, 4, 5, 6, 5, 6, 1, 2, 3, 4, 5, 6, 5, 6, 1, 2, 3, 4, 5, 6, 5, 
     6, 5, 6, 1, 2, 3, 4, 5, 6, 5, 6, 1, 2, 3, 4, 5, 6, 5, 6, 5, 6]) 
+1

'np.append' è definito in giri di' np.concatenate' Vedi https://github.com/numpy/numpy/blob/v1.10.0 /numpy/lib/function_base.py#L4098-L4150 –

+2

Possibile duplicato di [quando dovrei usare hstack/vstack vs append vs concatenato vs colonna \ _stack] (http://stackoverflow.com/questions/33356442/when-should- i-use-hstack-vstack-vs-accodamento-vs-concatenare-vs-colonna-stack) – Simon

risposta

16

np.append utilizza np.concatenate:

def append(arr, values, axis=None): 
    arr = asanyarray(arr) 
    if axis is None: 
     if arr.ndim != 1: 
      arr = arr.ravel() 
     values = ravel(values) 
     axis = arr.ndim-1 
    return concatenate((arr, values), axis=axis)