python统计正负数_NumPy数组中正负数岛屿的计数

这里有一个矢量化方法-def pos_neg_counts(a):

mask = a>0

idx = np.flatnonzero(mask[1:] != mask[:-1])

count = np.concatenate(( [idx[0]+1], idx[1:] - idx[:-1], [a.size-1-idx[-1]] ))

if a[0]<0:

return count[1::2], count[::2] # pos, neg counts

else:

return count[::2], count[1::2] # pos, neg counts

样本运行-

^{pr2}$

运行时测试

其他方法-# @Franz's soln

def split_app(my_array):

negative_index = my_array<0

splits = np.split(negative_index, np.where(np.diff(negative_index))[0]+1)

len_list = [len(i) for i in splits]

return len_list

更大数据集上的计时-In [20]: # Setup input array

...: reps = np.random.randint(3,10,(100000))

...: signs = np.ones(len(reps),dtype=int)

...: signs[::2] = -1

...: a = np.repeat(signs, reps)*np.random.randint(1,9,reps.sum())

...:

In [21]: %timeit split_app(a)

10 loops, best of 3: 90.4 ms per loop

In [22]: %timeit pos_neg_counts(a)

100 loops, best of 3: 2.21 ms per loop

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值