从计数函数中得到错误的结果
Getting wrong results from counting function
这是我的代码,我知道它不够干净,但它不能像我想的那样运行,有人可以帮助我吗?
我修好了,谢谢你的帮助
这段代码的大致思路是将每个坐标与一个范围进行比较,并计算每个网格的点数
结果是:
{'other': 862, 'B4': 2, 'D5': 1, 'A1': 0, 'D4': 2, 'A3': 2, 'A2': 2, 'A4': 0, 'B2': 36, 'B3': 8, 'C3': 15, 'C2': 50, 'C1': 1, 'C4': 7, 'D3': 4, 'C5': 1, 'B1': 7}
不知道为什么'other'得到这么多
import json
from pprint import pprint
xa1_min = 144.700000
xa1_max = 144.850000
ya1_min = -37.650000
ya1_max = -37.500000
xa2_min = 144.850000
xa2_max = 145.000000
ya2_min = -37.650000
ya2_max = -37.500000
xa3_min = 145.000000
xa3_max = 145.150000
ya3_min = -37.650000
ya3_max = -37.500000
xa4_min =145.150000
xa4_max =145.300000
ya4_min =-37.650000
ya4_max =-37.500000
xb1_min =144.700000
xb1_max =144.850000
yb1_min =-37.800000
yb1_max =-37.650000
xb2_min =144.850000
xb2_max =145.000000
yb2_min =-37.800000
yb2_max =-37.650000
xb3_min =145.000000
xb3_max =145.150000
yb3_min =-37.800000
yb3_max =-37.650000
xb4_min =145.150000
xb4_max =145.300000
yb4_min =-37.800000
yb4_max =-37.650000
xc1_min =144.700000
xc1_max =144.850000
yc1_min =-37.950000
yc1_max =-37.800000
xc2_min =144.850000
xc2_max =145.000000
yc2_min =-37.950000
yc2_max =-37.800000
xc3_min =145.000000
xc3_max =145.150000
yc3_min =-37.950000
yc3_max =-37.800000
xc4_min =145.150000
xc4_max =145.300000
yc4_min = -37.950000
yc4_max = -37.800000
xc5_min =145.300000
xc5_max =145.450000
yc5_min =-37.950000
yc5_max =-37.800000
xd3_min =145.000000
xd3_max =145.150000
yd3_min =-38.100000
yd3_max =-37.950000
xd4_min =145.150000
xd4_max =145.300000
yd4_min =-38.100000
yd4_max =-37.950000
xd5_min =145.300000
xd5_max =145.450000
yd5_min =-38.100000
yd5_max =-37.950000
#["properties"]['ID']
# Reading from grid
with open('tinyTwitter.json') as load_f:
info = json.load(load_f)
coordinates = list()
#print info
for line in info:
#print line['json']['coordinates']['coordinates']
coordinates.append(line['json']['coordinates']['coordinates'])
#print coordinates[0][1]
#print coordinates[0][0]
counts = {'A1':0,'A2':0,'A3':0,'A4':0,'B1':0,'B2':0,'B3':0,'B4':0,'C1':0,'C2':0,'C3':0,'C4':0,'C5':0,'D3':0,'D4':0,'D5':0,'other':0}
#comparing
def compare(x,y):
if xa1_min <= x <= xa1_max and ya1_min <= y <= ya1_max:
counts['A1'] +=1
elif xa2_min <= x <= xa2_max and ya2_min <=y<= ya2_max:
counts['A2'] +=1
elif xa3_min <= x <= xa3_max and ya3_min <=y<= ya3_max:
counts['A3'] +=1
elif xa4_min <= x <= xa4_max and ya4_min <=y<= ya4_max:
counts['A4'] += 1
elif xb1_min <= x <= xb1_max and yb1_min <=y<= yb1_max:
counts['B1'] += 1
elif xb2_min <= x <= xb2_max and yb2_min <=y<= yb2_max:
counts['B2'] += 1
elif xb3_min <= x <= xb3_max and yb3_min <=y<= yb3_max:
counts['B3'] += 1
elif xb4_min <= x <= xb4_max and yb4_min <=y<= yb4_max:
counts['B4'] += 1
elif xc1_min <= x <= xc1_max and yc1_min <=y<= yc1_max:
counts['C1'] += 1
elif xc2_min <= x <= xc2_max and yc2_min <=y<= yc2_max:
counts['C2'] += 1
elif xc3_min <= x <= xc3_max and yc3_min <=y<= yc3_max:
counts['C3'] += 1
elif xc4_min <= x <= xc4_max and yc4_min <=y<= yc4_max:
counts['C4'] += 1
elif xc5_min <= x <= xc5_max and yc5_min <=y<= yc5_max:
counts['C5'] += 1
elif xd3_min <= x <= xd3_max and yd3_min <=y<= yd3_max:
counts['D3'] += 1
elif xd4_min <= x <= xd4_max and yd4_min <=y<= yd4_max:
counts['D4'] += 1
elif xd5_min <= x <= xd5_max and yd5_min <=y<= yd5_max:
counts['D5'] += 1
else:
counts['other']+= 1
#print counts
for i,j in coordinates:
#print i,j
compare(i,j)
print counts
替换表格的行
counts['A1']+=counts['A1']
表格行
counts['A1']+=1
实际上,您永远不会递增 counts
,因为您每次都将其当前值 (0) 添加到它。
也许您正在寻找:
len(counts.keys())
如果不是,围绕您的问题提供更多背景信息将有助于找到解决方案。此外,看起来您可以通过将那些 min/max 数据点存储在字典列表中并将这些比较语句压缩到一个循环中来节省相当多的代码重复。大致如下:
data = [{'x-min': 0, 'x-max': 1, 'y-min': 0, 'y-max': 1, 'count': 0}, ...]
def within_threshold(x1, y1, point):
within_x = x >= point['x-min'] and x <= point['x-max']
within_y = y >= point['y-min'] and y <= point['y-max']
return within_x and within_y
def compare(x, y):
for point in data:
if within_threshold(x, y, point):
point['count'] += 1
这是我的代码,我知道它不够干净,但它不能像我想的那样运行,有人可以帮助我吗?
我修好了,谢谢你的帮助
这段代码的大致思路是将每个坐标与一个范围进行比较,并计算每个网格的点数
结果是: {'other': 862, 'B4': 2, 'D5': 1, 'A1': 0, 'D4': 2, 'A3': 2, 'A2': 2, 'A4': 0, 'B2': 36, 'B3': 8, 'C3': 15, 'C2': 50, 'C1': 1, 'C4': 7, 'D3': 4, 'C5': 1, 'B1': 7}
不知道为什么'other'得到这么多
import json
from pprint import pprint
xa1_min = 144.700000
xa1_max = 144.850000
ya1_min = -37.650000
ya1_max = -37.500000
xa2_min = 144.850000
xa2_max = 145.000000
ya2_min = -37.650000
ya2_max = -37.500000
xa3_min = 145.000000
xa3_max = 145.150000
ya3_min = -37.650000
ya3_max = -37.500000
xa4_min =145.150000
xa4_max =145.300000
ya4_min =-37.650000
ya4_max =-37.500000
xb1_min =144.700000
xb1_max =144.850000
yb1_min =-37.800000
yb1_max =-37.650000
xb2_min =144.850000
xb2_max =145.000000
yb2_min =-37.800000
yb2_max =-37.650000
xb3_min =145.000000
xb3_max =145.150000
yb3_min =-37.800000
yb3_max =-37.650000
xb4_min =145.150000
xb4_max =145.300000
yb4_min =-37.800000
yb4_max =-37.650000
xc1_min =144.700000
xc1_max =144.850000
yc1_min =-37.950000
yc1_max =-37.800000
xc2_min =144.850000
xc2_max =145.000000
yc2_min =-37.950000
yc2_max =-37.800000
xc3_min =145.000000
xc3_max =145.150000
yc3_min =-37.950000
yc3_max =-37.800000
xc4_min =145.150000
xc4_max =145.300000
yc4_min = -37.950000
yc4_max = -37.800000
xc5_min =145.300000
xc5_max =145.450000
yc5_min =-37.950000
yc5_max =-37.800000
xd3_min =145.000000
xd3_max =145.150000
yd3_min =-38.100000
yd3_max =-37.950000
xd4_min =145.150000
xd4_max =145.300000
yd4_min =-38.100000
yd4_max =-37.950000
xd5_min =145.300000
xd5_max =145.450000
yd5_min =-38.100000
yd5_max =-37.950000
#["properties"]['ID']
# Reading from grid
with open('tinyTwitter.json') as load_f:
info = json.load(load_f)
coordinates = list()
#print info
for line in info:
#print line['json']['coordinates']['coordinates']
coordinates.append(line['json']['coordinates']['coordinates'])
#print coordinates[0][1]
#print coordinates[0][0]
counts = {'A1':0,'A2':0,'A3':0,'A4':0,'B1':0,'B2':0,'B3':0,'B4':0,'C1':0,'C2':0,'C3':0,'C4':0,'C5':0,'D3':0,'D4':0,'D5':0,'other':0}
#comparing
def compare(x,y):
if xa1_min <= x <= xa1_max and ya1_min <= y <= ya1_max:
counts['A1'] +=1
elif xa2_min <= x <= xa2_max and ya2_min <=y<= ya2_max:
counts['A2'] +=1
elif xa3_min <= x <= xa3_max and ya3_min <=y<= ya3_max:
counts['A3'] +=1
elif xa4_min <= x <= xa4_max and ya4_min <=y<= ya4_max:
counts['A4'] += 1
elif xb1_min <= x <= xb1_max and yb1_min <=y<= yb1_max:
counts['B1'] += 1
elif xb2_min <= x <= xb2_max and yb2_min <=y<= yb2_max:
counts['B2'] += 1
elif xb3_min <= x <= xb3_max and yb3_min <=y<= yb3_max:
counts['B3'] += 1
elif xb4_min <= x <= xb4_max and yb4_min <=y<= yb4_max:
counts['B4'] += 1
elif xc1_min <= x <= xc1_max and yc1_min <=y<= yc1_max:
counts['C1'] += 1
elif xc2_min <= x <= xc2_max and yc2_min <=y<= yc2_max:
counts['C2'] += 1
elif xc3_min <= x <= xc3_max and yc3_min <=y<= yc3_max:
counts['C3'] += 1
elif xc4_min <= x <= xc4_max and yc4_min <=y<= yc4_max:
counts['C4'] += 1
elif xc5_min <= x <= xc5_max and yc5_min <=y<= yc5_max:
counts['C5'] += 1
elif xd3_min <= x <= xd3_max and yd3_min <=y<= yd3_max:
counts['D3'] += 1
elif xd4_min <= x <= xd4_max and yd4_min <=y<= yd4_max:
counts['D4'] += 1
elif xd5_min <= x <= xd5_max and yd5_min <=y<= yd5_max:
counts['D5'] += 1
else:
counts['other']+= 1
#print counts
for i,j in coordinates:
#print i,j
compare(i,j)
print counts
替换表格的行
counts['A1']+=counts['A1']
表格行
counts['A1']+=1
实际上,您永远不会递增 counts
,因为您每次都将其当前值 (0) 添加到它。
也许您正在寻找:
len(counts.keys())
如果不是,围绕您的问题提供更多背景信息将有助于找到解决方案。此外,看起来您可以通过将那些 min/max 数据点存储在字典列表中并将这些比较语句压缩到一个循环中来节省相当多的代码重复。大致如下:
data = [{'x-min': 0, 'x-max': 1, 'y-min': 0, 'y-max': 1, 'count': 0}, ...]
def within_threshold(x1, y1, point):
within_x = x >= point['x-min'] and x <= point['x-max']
within_y = y >= point['y-min'] and y <= point['y-max']
return within_x and within_y
def compare(x, y):
for point in data:
if within_threshold(x, y, point):
point['count'] += 1