1 from heapq import *;
2 from collections import *;
3 import random as rd;
4 import operator as op;
5 import re;
6
7 data = [2,2,6,7,9,12,34,0,76,-12,45,79,102];
8 s = set();
9
10 for num in data:
11 s.add(data.pop(0));
12 if s.__len__() == 4:
13 break;
14
15 heap = [];
16 for n in s:
17 heappush(heap,n);
18
19 print(heap);
20
21
22 for num in data:
23 if num > heap[0]:
24 heapreplace(heap,num);
25
26 print(nlargest(4,heap))
27
28
29 def file2matrix(path,dimension):
30 with open(path,'r+') as fr:
31 lines = fr.readlines();
32 num_lines = len(lines);
33 return_mat = np.zeros((num_lines,dimension));
34 classLabel = [];
35
36 index = 0;
37 for line in lines:
38 contents = line.strip().split(' ');
39 li = contents[:dimension];
40 li = list(map(float,li));
41 return_mat[index,:] = li;
42
43 if(contents[-1] == 'small'):
44 classLabel.append(0);
45 elif(contents[-1] == 'middle'):
46 classLabel.append(1)
47 elif (contents[-1] == 'large'):
48 classLabel.append(2)
49 index += 1;
50
51 return return_mat, classLabel;
52
53 #mat,label = file2matrix('G:\\test.txt',3);
54
55 import collections;
56 print(dir(collections))
57
58 class MyObject:
59 def __init__(self,score):
60 self.score = score;
61
62 def __repr__(self):
63 return "MyObject(%s)" % self.score;
64
65 objs = [MyObject(i) for i in range(5)];
66 rd.shuffle(objs);
67 print(objs);
68
69 g = op.attrgetter("score");
70 scores = [g(i) for i in objs];
71 print("scores: ",scores);
72 print(sorted(objs,key = g));
73
74 l = [(i,i*-2) for i in range(4)]
75 print ("tuples: ", l)
76 g = op.itemgetter(1)
77 vals = [g(i) for i in l]
78 print ("values:", vals)
79 print ("sorted:", sorted(l, key=g))
80
81
82 class MyObj(object):
83 def __init__(self, val):
84 super(MyObj, self).__init__()
85 self.val = val
86 return
87
88 def __str__(self):
89 return "MyObj(%s)" % self.val
90
91 def __lt__(self, other):
92 return self.val < other.val
93
94 def __add__(self, other):
95 return MyObj(self.val + other.val)
96
97
98 a = MyObj(1)
99 b = MyObj(2)
100
101 print(op.lt(a, b))
102
103 print(op.add(a, b))
104
105
106
107 items = [('A', 1),('B', 2),('C', 3)]
108 regular_dict = dict(items);
109 order_dict = OrderedDict(items);
110 print(regular_dict);
111 print(order_dict);
112
113
114 # -*- coding: utf-8 -*-
115 import numpy as np
116 import matplotlib.pyplot as plt
117 from matplotlib.lines import Line2D
118
119 x = np.linspace(0, 10, 1000)
120 y = np.sin(x)
121 z = np.cos(x**2)
122
123 fig = plt.figure(figsize=(8,4),dpi=120)
124 plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)
125 plt.plot(x,z,"b--",label="$cos(x^2)$")
126 plt.xlabel("Time(s)")
127 plt.ylabel("Volt")
128 plt.title("PyPlot First Example")
129 plt.ylim(-1.2,1.2)
130 plt.legend()
131 #plt.show()
132
133
134 f = plt.gcf();
135 all_lines = plt.getp(f.axes[0],'lines');
136 print(all_lines[0])
137
138 fig = plt.figure()
139 line1 = Line2D([0,1],[0,1], transform=fig.transFigure, figure=fig, color="r")
140 line2 = Line2D([0,1],[1,0], transform=fig.transFigure, figure=fig, color="g")
141 fig.lines.extend([line1, line2])
142 fig.show()
143
144 def autonorm(dataSet):
145 minVals = dataSet.min(0);
146 maxVals = dataSet.max(0);
147 ranges = maxVals - minVals;
148 rows = dataSet.shape[0];
149 ranges = np.tile(ranges,(rows,1));
150 dataSet = dataSet - np.tile(minVals,(rows,1));
151 normData = dataSet / ranges;
152 return normData;
153
154
155 def classify(inX,path,k):
156 #1.文件到矩阵的映射
157 labels,dataSet = file2matrix(path);
158 #2.矩阵归一化处理
159 dataSet = autonorm(dataSet);
160 #3.计算欧式距离
161 distance = dataSet - inX;
162 distance = np.square(distance);
163 distance = distance.sum(axis=1);
164 distance = np.sqrt(distance);
165 print(distance);
166 #4.对距离排序
167 sortdisIndices = distance.argsort();
168 #5.取前k个,加载到dict中,然后对dict排序,取首个值
169 classCount = {};
170 for index in range(k):
171 label = labels[sortdisIndices[index]];
172 print(label)
173 classCount[label] = classCount.get(label,0) + 1;
174
175 sortedDict = sorted(classCount.items(),key=op.itemgetter(1),reverse=True);
176 return sortedDict[0][0];
177
178 def file2matrix(filepath):
179 with open(filepath,'r+') as fr:
180 lines = fr.readlines();
181 num_lines = len(lines);
182 classLabelVector = [];
183 dimension = len(lines[0].strip().split(" "))-1;
184 dataSet = np.zeros((num_lines,dimension));
185
186 index = 0;
187 for line in lines:
188 contents = line.strip().split(" ");
189 li = contents[:dimension];
190 li = list(map(float,li));
191 dataSet[index,:] = li;
192
193 if contents[-1] == 'largeDoses':
194 classLabelVector.append(3);
195 elif contents[-1] == 'smallDoses':
196 classLabelVector.append(2);
197 elif contents[-1] == 'didntLike':
198 classLabelVector.append(1);
199 index += 1;
200
201 return classLabelVector,dataSet;
202
203
204
205
206 def main():
207
208 inX = np.array([1.2,1.0,0.8]);
209 label = classify(inX,"E:\\Python\\datingTestSet.txt",3);
210 print("class:",label);
211
212
213 if __name__ == '__main__':
214 main();