2017-04-25 3 views
3

Kann mir jemand das Verhalten von np.atleast_3d() erklären?Verhalten von numpy atleast_3d()

Von Verwendung np.atleast_2d() Ich dachte, ist die Zugabe np.newaxis ähnlich war, während setzen, was auch immer es ihm die letzte Dimension geführt wird:

np.atleast_2d(3.0) 
>>> array([[ 3.]]) 

np.atleast_2d([1.0, 2.0, 3.0]) 
>>> array([[1.0, 2.0, 3.0]]) 

Aber np.atleast_3d() scheint recht zu verhalten verschiedene

np.atleast_3d([[2.9, 3.0]]) 
>>> array([[[ 2.9], 
      [ 3. ]]]) 

In der Dokumentation

For example, a 1-D array of shape (N,) becomes a view of shape (1, N, 1), 
and a 2-D array of shape (M, N) becomes a view of shape (M, N, 1). 

ich hätte erwartet (M, N) zu (1, M, N) und (N,) zu (1, 1, N, 1)

Ist dieses Verhalten nicht irreführend?

+1

Sie können den eigentlichen Code sehen mit 'np.source (np.atleast_3d)'. Je nach Anzahl der Dimensionen gibt es verschiedene Dinge. – hpaulj

Antwort

2

Hier ist ein Auszug aus atleast_2d:

if len(ary.shape) == 0: 
     result = ary.reshape(1, 1) 
    elif len(ary.shape) == 1: 
     result = ary[newaxis,:] 
    else: 
     result = ary 

So verwendet er den newaxis Trick, wenn das Array 1d ist.

für 3D:

if len(ary.shape) == 0: 
     result = ary.reshape(1, 1, 1) 
    elif len(ary.shape) == 1: 
     result = ary[newaxis,:, newaxis] 
    elif len(ary.shape) == 2: 
     result = ary[:,:, newaxis] 
    else: 
     result = ary 

Auch sie nutzt den newaxis Trick, aber in anderer Weise für 1 und 2D-Arrays. Es macht was die Ärzte sagen.

Es gibt andere Möglichkeiten, die Form zu ändern. Zum Beispiel verwendet column_stack

array(arr, copy=False, subok=True, ndmin=2).T 

expand_dims verwendet

a.reshape(shape[:axis] + (1,) + shape[axis:]) 
+0

@Joe überdenken, wenn Sie die Antwort genug, um es zu akzeptieren! – uhoh

Verwandte Themen