2017-04-11 36 views

回答

3

您可以使用np.take到索引2元素的數組/列表與k值作爲指標,像這樣 -

np.take(['blue','red'],k) 

採樣運行 -

In [19]: k = np.array([0, 1, 1, 0 ,1]) 

In [20]: np.take(['blue','red'],k) 
Out[20]: 
array(['blue', 'red', 'red', 'blue', 'red'], 
     dtype='|S4') 

有了明確的索引方法 -

In [23]: arr = np.array(['blue','red']) 

In [24]: arr[k] 
Out[24]: 
array(['blue', 'red', 'red', 'blue', 'red'], 
     dtype='|S4') 

或者與初始化一個字符串,然後分配給另一個 -

In [41]: out = np.full(k.size, 'blue') 

In [42]: out[k==1] = 'red' 

In [43]: out 
Out[43]: 
array(['blue', 'red', 'red', 'blue', 'red'], 
     dtype='|S4') 

運行試驗

途徑 -

def app1(k): 
    return np.take(['blue','red'],k) 

def app2(k): 
    arr = np.array(['blue','red']) 
    return arr[k] 

def app3(k): 
    out = np.full(k.size, 'blue') 
    out[k==1] = 'red' 
    return out 

計時 -

In [46]: k = np.random.randint(0,2,(100000)) 

In [47]: %timeit app1(k) 
    ...: %timeit app2(k) 
    ...: %timeit app3(k) 
    ...: 
1000 loops, best of 3: 413 µs per loop 
10000 loops, best of 3: 103 µs per loop 
1000 loops, best of 3: 908 µs per loop