我有以下数据文件。
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)
非常感谢任何帮助。
答案 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)
这是使用csv
和itertools.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>