2016-06-16 9 views
17

ich die Udacity Kurs auf tiefem Lernen zu nehmen und ich über den folgenden Code kam:In Numpy, was macht die Auswahl von [:, None]?

def reformat(dataset, labels): 
    dataset = dataset.reshape((-1, image_size * image_size)).astype(np.float32) 
    # Map 0 to [1.0, 0.0, 0.0 ...], 1 to [0.0, 1.0, 0.0 ...] 
    labels = (np.arange(num_labels) == labels[:,None]).astype(np.float32) 
    return dataset, labels 

Was ist labels[:,None] hier eigentlich?

Antwort

15

http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html

numpy.newaxis

newaxis Das Objekt kann in allen Slicing-Operationen verwendet werden, um eine eine Achse mit einer Länge zu erzeugen. : const: newaxis ist ein Alias ​​für 'None', und 'None' kann stattdessen mit demselben Ergebnis verwendet werden.

http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.expand_dims.html

mit einem Teil des Codes

In [154]: labels=np.array([1,3,5]) 

In [155]: labels[:,None] 
Out[155]: 
array([[1], 
     [3], 
     [5]]) 

In [157]: np.arange(8)==labels[:,None] 
Out[157]: 
array([[False, True, False, False, False, False, False, False], 
     [False, False, False, True, False, False, False, False], 
     [False, False, False, False, False, True, False, False]], dtype=bool) 

In [158]: (np.arange(8)==labels[:,None]).astype(int) 
Out[158]: 
array([[0, 1, 0, 0, 0, 0, 0, 0], 
     [0, 0, 0, 1, 0, 0, 0, 0], 
     [0, 0, 0, 0, 0, 1, 0, 0]]) 
13

None Demonstrieren ist ein Alias ​​für NP.newaxis. Es schafft eine Achse mit einer Länge 1. Dies kann für Matrix multiplcation usw.

>>>> import numpy as NP 
>>>> a = NP.arange(1,5) 
>>>> print a 
[1 2 3 4] 
>>>> print a.shape 
(4,) 
>>>> print a[:,None].shape 
(4, 1) 
>>>> print a[:,None] 
[[1] 
[2] 
[3] 
[4]]  
1

Ich bin hierher gekommen, nachdem sie genau das gleiche Problem, die die gleiche Udacity natürlich nützlich sein. Was ich tun wollte, ist die eindimensionale numpy Reihe/Array, die nicht mit numpy.transpose funktioniert ([1, 2, 3]) zu transponieren. Also wollte ich Sie hinzufügen können, wie diese umgesetzt werden (source):

numpy.matrix([1, 2, 3]).T 

Es ergibt sich:

matrix([[1], 
     [2], 
     [3]]) 

die ziemlich identisch ist (Typ unterscheidet) zu:

x=np.array([1, 2, 3]) 
x[:,None] 

Aber ich denke, es ist einfacher zu erinnern ...

Verwandte Themen