我有一个2D数组的0,1和2的列数非常大。我试图只选择那些连续的零不超过一定数量的行。我的方法是将数组转换为字符,合并列,然后对其应用正则表达式过滤器。但这是非常缓慢的。特别是每行字符的转换和连接。有没有办法让它快一个数量级?也许用另一种策略?
import re
import numpy as np
n=100
k = 1000
x = np.random.choice([0,1,2], replace=True, size=(n,k))
s = np.apply_along_axis(lambda t: ''.join(t) , 1, x.astype(str))
N_ramp=3
mask = [re.search(r'[12]0{1,'+str(N_ramp)+r'}[12]', i) is None for i in s]
字符串
1条答案
按热度按时间l5tcr1uw1#
使用this answer,您可以获得连续
True
值的计数。你可以把它应用到你的问题中,如果值为0,你的数组就变成一个布尔数组True
,否则就变成False
。然后将链接算法应用于每一行,并检查结果中是否有满足条件(所需的连续零的数量)的值。我把它们存储在一个列表中。打印出总和显示有多少行满足条件。字符串