连续发生的项目数

时间:2017-09-26 17:16:13

标签: python numpy count

我有以下数据文件。

 1 3
 2 6
 3 7
 4 6
 5 8
 6 4
 7 5
 8 9
 9 7
 10 2
 11 3
 12 5
 13 3

我的目标是在第2列中计算等于或大于5的项目,这些项目连续出现至少3次。我已经能够计算出计数部分但不能计算出继承部分。

所以,我希望这个数据文件的输出为2,如第2列中有2个字符串(6,7,6,8)和(5,9,7),其中我的数字等于和大于5连续出现至少3次。

import numpy as np
data=np.loadtxt('/Users/Hrihaan/Desktop/DataF.txt')
z=data[:,1]
count = len([i for i in z if i >= 5])
print(count)

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:4)

方法#1:获取开始,停止每个有效组的索引并获取它们的计数 -

mask = np.concatenate(([False], ar>=5, [False] ))
idx = np.flatnonzero( np.concatenate(([False], mask[1:] != mask[:-1], [False] )) )
count = ((idx[1::2]-idx[::2])>=3).sum()

方法#2:使用1D卷积 -

mask = np.convolve(ar>=5,[1]*3)>=3
out = (mask[1:] > mask[:-1]).sum()

答案 1 :(得分:3)

这是使用csvitertools.groupby的纯Python方法:

首先,让我伪造文件:

>>> s = """1 3
... 2 6
... 3 7
... 4 6
... 5 8
... 6 4
... 7 5
... 8 9
... 9 7
... 10 2
... 11 3
... 12 5
... 13 3"""
>>> import io

现在,为了它的肉:

>>> import itertools
>>> import csv
>>> with io.StringIO(s) as f:
...     reader = csv.reader(f, delimiter=' ')
...     second_col = (int(c) for _, c in reader)
...     gb = itertools.groupby(second_col, (5).__le__)
...     x = sum(k for k, g in gb if k and len(list(g)) >= 3)
...
>>> x
2

答案 2 :(得分:-1)

您可以遍历该列,检查并保持运行计数。

<form class="example-form">
  <md-form-field class="example-full-width">
    <input mdInput placeholder="NIC" [formControl]="nicFormControl">
    <md-error *ngIf="nicFormControl.hasError('required')">
      NIC is <strong>required</strong>
    </md-error>
    <md-error *ngIf="nicFormControl.hasError(validateNICInput)">
      Please enter a valid NIC
    </md-error>
  </md-form-field>
</form>