2
我有一個包含0和1的值變化int數組成字符串數組是根據它的值
k = np.array([0, 1, 1, 0 ,1])
欲陣列轉換到包含'blue'
如果該值是0和'red'
如果陣列的nparray該值爲1。我喜歡知道最快的方式可能
我有一個包含0和1的值變化int數組成字符串數組是根據它的值
k = np.array([0, 1, 1, 0 ,1])
欲陣列轉換到包含'blue'
如果該值是0和'red'
如果陣列的nparray該值爲1。我喜歡知道最快的方式可能
您可以使用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