Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何计算数组中一对特定值的重复次数?_Python_Python 2.7 - Fatal编程技术网

Python 如何计算数组中一对特定值的重复次数?

Python 如何计算数组中一对特定值的重复次数?,python,python-2.7,Python,Python 2.7,我有两个大小相同的向量,一个用于波高,一个用于周期,分别对应于测量的同一时间点。我想知道这两个特定数据重复了多少次,例如: Hs=[0.51.02.30.50.5] Tm=[2.0 2.5 2.0 2.0 3.0] 所以你可以看到: Hs Tm计数 0.52.02 0.52.50 0.5 3.0 1 1.02.0 1.02.51 我试过了,但出现了以下错误,因为我在没有数据的情况下显示了整行和整列,并且当我看到值的信息时​​. from numpy import * from matplotl

我有两个大小相同的向量,一个用于波高,一个用于周期,分别对应于测量的同一时间点。我想知道这两个特定数据重复了多少次,例如:

Hs=[0.51.02.30.50.5]

Tm=[2.0 2.5 2.0 2.0 3.0]

所以你可以看到:

Hs Tm计数

0.52.02

0.52.50

0.5 3.0 1

1.02.0

1.02.51

我试过了,但出现了以下错误,因为我在没有数据的情况下显示了整行和整列,并且当我看到值的信息时​​.

from numpy import *
from matplotlib.pyplot import *
import matplotlib.pyplot as plt
from time import *

clf; cla; close
dat = loadtxt("ecmwf.dat", unpack=True)
HSf = dat[0,:]
HSf = around(HSf,decimals=1)
TMf = dat[1,:]
TMf = around(TMf,decimals=1)
mmat = zeros((31,141))

vhs = linspace(0.0,3.0,31)
vtm = linspace(0.0,14.0,141)

for i in xrange(0, vtm.size):
for k in xrange(0, vhs.size):
    if all((k <= vhs.size) & (i <= vtm.size)):
        lg1 = (TMf == vtm[i]) & (HSf == vhs[k])
        lg2 = sum(lg1)
    if lg2>=1:
        fg1 = text(i,k, str(lg2),horizontalalignment='center', verticalalignment='center',fontsize=6)
    mmat[k,i] = lg2
从numpy导入*
从matplotlib.pyplot导入*
将matplotlib.pyplot作为plt导入
不定期进口*
clf;cla;关闭
dat=loadtxt(“ecmwf.dat”,unpack=True)
HSf=dat[0,:]
HSf=大约(HSf,小数=1)
TMf=dat[1,:]
TMf=左右(TMf,小数=1)
mmat=零((31141))
vhs=linspace(0.0,3.0,31)
vtm=linspace(0.0,14.0141)
对于X范围内的i(0,vtm.尺寸):
对于X范围内的k(0,vhs尺寸):

如果全部((k我建议使用
计数器
来计算你的配对

from collections import Counter

Hs = [0.5, 1.0, 2.3, 0.5, 0.5]
Tm = [2.0, 2.5, 2.0, 2.0, 3.0]

occurrences = Counter(zip(Hs, Tm))
for h in sorted(set(Hs)):
    for t in sorted(set(Tm)):
        print h, t, occurrences[(h,t)]
结果:

0.5 2.0 2
0.5 2.5 0
0.5 3.0 1
1.0 2.0 0
1.0 2.5 1
1.0 3.0 0
2.3 2.0 1
2.3 2.5 0
2.3 3.0 0

python 2.7的集合模块中提供了
计数器

import collections

Hs = [0.5, 1.0, 2.3, 0.5, 0.5]

Tm = [2.0, 2.5, 2.0, 2.0, 3.0]

pairs = zip(Hs, Tm)
我们可以将易趣拉链拉在一起,使它们整齐地配对:

>>> print(list(pairs))
[(0.5, 2.0), (1.0, 2.5), (2.3, 2.0), (0.5, 2.0), (0.5, 3.0)]
所以

印刷品:

Counter({(0.5, 2.0): 2, (1.0, 2.5): 1, (0.5, 3.0): 1, (2.3, 2.0): 1})
由于Counter只是dict的一个子类,我们可以将其视为dict:

for pair, count in counts.items():
    print(pair, count)
打印出:

(1.0, 2.5) 1
(0.5, 3.0) 1
(0.5, 2.0) 2
(2.3, 2.0) 1
如果您想要不存在的对的计数,请使用该对访问计数器,就像dict中的键一样:

counts[(1.0, 3.0)]
返回

0

您可以使用
collections.Counter
执行此任务

import collections
import itertools

hs = 0.5, 1.0, 2.3, 0.5, 0.5
tn = 2.0, 2.5, 2.0, 2.0, 3.0

pairCount = collections.Counter(itertools.izip(hs, tm))

print(pairCount)
结果应该是:

Counter({(0.5, 2.0): 2, (1.0, 2.5): 1, (2.6, 2.0): 1, (0.5, 3.0): 1})
collections.Counter()将计算iterable中的进程数:

>>> import numpy as np 
>>> from collections import Counter
>>> Hs = [0.5, 1.0, 2.3, 0.5, 0.5]
>>> Tm = [2.0, 2.5, 2.0, 2.0, 3.0]
>>> repeats = Counter(zip(Hs,Tm))
>>> 
>>> aHs = np.array(Hs)
>>> aTm = np.array(Tm)
>>> aRepeats = Counter(zip(aHs,aTm))
>>> aRepeats
Counter({(0.5, 2.0): 2, (2.2999999999999998, 2.0): 1, (1.0, 2.5): 1, (0.5, 3.0): 1})
>>> 
>>> aRepeats[(0.5, 2.0)]
2
>>> repeats[(1.0, 2.5)]
1
>>>

所以我在起步阶段很慢-不确定我是否应该删除这个。我想我得到了第一个最完整的答案,是我提供了你想要的,还是你想要零计数?
>>> import numpy as np 
>>> from collections import Counter
>>> Hs = [0.5, 1.0, 2.3, 0.5, 0.5]
>>> Tm = [2.0, 2.5, 2.0, 2.0, 3.0]
>>> repeats = Counter(zip(Hs,Tm))
>>> 
>>> aHs = np.array(Hs)
>>> aTm = np.array(Tm)
>>> aRepeats = Counter(zip(aHs,aTm))
>>> aRepeats
Counter({(0.5, 2.0): 2, (2.2999999999999998, 2.0): 1, (1.0, 2.5): 1, (0.5, 3.0): 1})
>>> 
>>> aRepeats[(0.5, 2.0)]
2
>>> repeats[(1.0, 2.5)]
1
>>>