取两个list的差
list
对于两个list,只要采取相加的操作,就会把两个list合并到一起。
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> b
array([2, 3, 4])
>>> list(a) + list(b)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4]
那么取差集呢?
一般来说是用列表推导式
col1 = [_ for _ in a if _ not in b]
如果数据量上万,将会发现通过列表表达式取差集耗时非常严重。
eg:
a = np.arange(100000)
b = np.arange(10000,80000)
time1 = time.time()
col1 = [_ for _ in a if _ not in b]
print('list method: ', time.time() - time1)
# list method: 3.473159074783325
array
如果用array来取差集呢?
在数据量很少的时候,体现不出array的优势
但是在数据量很大,上万的时候,会出现上千倍的差距:
a = np.arange(100000)
b = np.arange(10000,80000)
time1 = time.time()
bool_arr = np.in1d(a, b) # cols_all in cols?
unstable_items = a[~bool_arr]
print('array method: ', time.time() - time1)
# array method: 0.006077766418457031
取一个list中元素大于0的对应的index
list
列表推导式
c = np.random.randn(10000000)
# list列表推导式
time1 = time.time()
result1 = [_ for _ in range(len(c)) if c[_] > 0]
print('list method: ', time.time() - time1)
# list method: 2.9131264686584473
array
c = np.random.randn(10000000)
time1 = time.time()
result2 = np.where(c>0)[0]
print('array method: ', time.time() - time1)
# array method: 0.05199265480041504
可以看到,运用向量化操作可以:
利用并行计算和硬件加速来提高程序的性能。在处理大量数据时,向量化操作可以减少代码的复杂性和运行时间,使程序更加高效。