一些向量化操作--取差集等

取两个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

可以看到,运用向量化操作可以:
利用并行计算和硬件加速来提高程序的性能。在处理大量数据时,向量化操作可以减少代码的复杂性和运行时间,使程序更加高效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值