[英]NumPy: 1D numpy array to slice a list
如何提取與1D numpy.ndarray
包含的索引相對應的列表元素?
這是一個例子:
list_data = list(range(1, 100))
arr_index = np.asarray([18, 55, 22])
arr_index.shape
list_data[arr_index] # FAILS
我希望能夠檢索與list_data
相對應的arr_index
元素。
你可以使用numpy.take
-
import numpy as np
np.take(list_data,arr_index)
樣品運行 -
In [12]: list_data = list(range(1, 20))
In [13]: list_data
Out[13]: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
In [14]: arr_index = np.asarray([3, 5, 12])
In [15]: np.take(list_data,arr_index)
Out[15]: array([ 4, 6, 13])
要么
import numpy as np
list_data = list(range(1, 100))
arr_index = np.asarray([18, 55, 22])
arr_index.shape
new_ = [list_data[i] for i in arr_index]
>> [19, 56, 23]
注意
list_data = list(range(1, 100)
可以替換為list_data = range(1, 100)
arr_index = np.asarray([18, 55, 22])
可以替換為arr_index = np.array([18, 55, 22])
我剛做了一些時間測試:
In [226]: ll=list(range(20000))
In [227]: ind=np.random.randint(0,20000,200)
In [228]: timeit np.array(ll)[ind]
100 loops, best of 3: 3.29 ms per loop
In [229]: timeit np.take(ll,ind)
100 loops, best of 3: 3.34 ms per loop
In [230]: timeit [ll[x] for x in ind]
10000 loops, best of 3: 65.1 µs per loop
In [231]: arr=np.array(ll)
In [232]: timeit arr[ind]
100000 loops, best of 3: 6 µs per loop
列表理解顯然是勝利者。 索引數組顯然更快,但創建該數組的開銷很大。
轉換為對象dtype數組更快。 我有點驚訝,但它必須是因為它可以轉換而無需解析:
In [236]: timeit np.array(ll,dtype=object)[ind].tolist()
1000 loops, best of 3: 1.04 ms per loop
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.