Skip to content
Home » Tennis » Medvedev, Daniil vs Opelka, Reilly

Medvedev, Daniil vs Opelka, Reilly

Medvedev, Daniil

LLWWW
-

Opelka, Reilly

WLWLW
Date: 2025-07-23
Time: 16:50
(2nd Set’)
Venue: Washington - Stadium
Score: 0-1

Overview of the Medvedev vs. Opelka Tennis Match

This highly anticipated tennis match between Daniil Medvedev and Reilly Opelka promises to be an exciting clash of skill and power. Medvedev, known for his exceptional all-court game and tactical intelligence, faces the challenge of countering Opelka’s towering serve and formidable baseline play. This matchup is expected to offer a dynamic viewing experience with a mix of strategic depth and explosive power play.

%MingYangWang1/K-Means-Clustering/kmean_code.py
# -*- coding: utf-8 -*-
# 3. 片段是一行,一句话,短短的一段文字,一般来说,一个段落的长短不定,但是就是一段话,一个段落可以有很多片段,也可能只有一个片段。
import numpy as np
import matplotlib.pyplot as plt
from scipy.io import loadmat
import random #随机数
import math
import time

def showCluCenter(clu_center):
for i in range(len(clu_center)):
plt.plot(clu_center[i][0], clu_center[i][1], ‘og’, markersize=10, markeredgecolor=’black’)
plt.show()

def kmeans(k,data,num):

delta = 0.000001 #误差
clu_center = [] #聚类中心点
pre_clu = [] #上一次的聚类结果
new_clu = [] #新的聚类结果
distance = [] #距离

for i in range(k):
clu_center.append(data[random.randint(0, num – 1)]) # 随机选取聚类中心从数据集中取

for i in range(100):
pre_clu = np.copy(new_clu)
for i in range(k):
new_clu.append([])

#计算数据集中的各点到聚类中心点的距离,并将该点距离最近的聚类中心的下标保存到距离列表中
for j in range(num):
distance = []
for i in range(k):
distance.append(np.sqrt(
(data[j][0] – clu_center[i][0]) ** 2 + (data[j][1] – clu_center[i][1]) ** 2)) #计算距离列表的某一点到聚类中心的欧式距离
new_clu[distance.index(min(distance))].append(data[j])

for i in range(k):
temp = []
temp.append(0)
temp.append(0)

#根据每个聚类中心下保存的点,重新计算新的聚类中心点
for point in new_clu[i]:
temp[0] += point[0]
temp[1] += point[1]
temp[0] /= len(new_clu[i])
temp[1] /= len(new_clu[i])

clu_center[i] = temp

if (pre_clu == new_clu).all(): #所有聚类结果都不变,则结束循环
break

showCluCenter(clu_center)

for i in range(k):
print(str(i+1) + ‘ cluster:’)
print(new_clu[i][0])
print(‘cluster size:’,len(new_clu[i]))

def main():
data = loadmat(‘data.mat’) #导入数据集
k = int(input(‘Please input the number of clusters a:’)) #输入聚类个数
data_matrix = data[‘data’] #获取数据列表
num = data_matrix.shape[0] #获取数据集个数

# 将矩阵转换成列表,以方便配合后续程序
new_data = []
for i in range(num):
tmp = []
tmp.append(data_matrix[i][0])
tmp.append(data_matrix[i][1])
new_data.append(tmp)

start_time = time.time()
kmeans(k,new_data,num)
end_time = time.time()
print(“kmeans run time:”,end_time-start_time)

time.sleep(5)
main() #循环执行

if __name__ == “__main__”:
print(‘program begin!’)
main()
MingYangWang1/K-Means-Clustering/README.md
# K-Means-Clustering
K-Means 算法实现
# -*- coding: utf-8 -*-
# 3. 片段是一行,一句话,短短的一段文字,一般来说,一个段落的长短不定,但是就是一段话,一个段落可以有很多片段,也可能只有一个片段。
import numpy as np
import matplotlib.pyplot as plt
from scipy.io import loadmat
import random #随机数
import math
import time

#自然断点停止
def signal_handler(signal,frame):
print(“You Pressed Ctrl+C”)
#input(‘program exit!’)

def showCluCenter(clu_center):
for i in range(len(clu_center)):
plt.plot(clu_center[i][0], clu_center[i][1], ‘og’, markersize=10, markeredgecolor=’black’)
plt.show()

def kmeans(k,data,num):

delta = 0.000001 #误差
clu_center = [] #聚类中心点
pre_clu = [] #上一次的聚类结果
new_clu = [] #新的聚类结果
distance = [] #距离

for i in range(k):
clu_center.append(data[random.randint(0, num – 1)]) # 随机选取聚类中心从数据集中取

for i in range(100):
pre_clu = np.copy(new_clu)
for i in range(k):
new_clu.append([])

#计算数据集中的各点到聚类中心点的距离,并将该点距离最近的聚类中心的下标保存到距离列表中
for j in range(num):
distance = []
for i in range(k):
distance.append(np.sqrt(
(data[j][0] – clu_center[i][0]) ** 2 + (data[j][1] – clu_center[i][1]) ** 2)) #计算距离列表的某一点到聚类中心的欧式距离
new_clu[distance.index(min(distance))].append(data[j])

for i in range(k):
temp = []
temp.append(0)
temp.append(0)

#根据每个聚类中心下保存的点,重新计算新的聚类中心点
for point in new_clu[i]:
temp[0] += point[0]
temp[1] += point[1]
temp[0] /= len(new_clu[i])
temp[1] /= len(new_clu[i])

clu_center[i] = temp

if (pre_clu == new_clu).all(): #所有聚类结果都不变,则结束循环
break

showCluCenter(clu_center)

for i in range(k):
print(str(i+1) + ‘ cluster:’)
print(new_clu[i][0])
print(‘cluster size:’,len(new_clu[i]))
tmp = []
try:
tmp.append(min([i[0] for i in new_clu[i]])) #每个簇点在x坐标上的最小值
tmp.append(max([i[0] for i in new_clu[i]])) #每个簇点在x坐标上的最大值
tmp.append(min([i[1] for i in new_clu[i]])) #每个簇点在y坐标上的最小值
tmp.append(max([i[1] for i in new_clu[i]])) #每个簇点在y坐标上的最大值
plt.plot([tmp[0],tmp[0],tmp[1],tmp[1],tmp[0]],[tmp[2],tmp[3],tmp[3],tmp[2],tmp[2]],’y–‘)
plt.plot([tmp[0],tmp[1]],[tmp[3],tmp[3]],’y–‘)
plt.plot([tmp[1],tmp[1]],[tmp[2],tmp[3]],’y–‘)
plt.plot([tmp[0],tmp[1]],[tmp[2],tmp[2]],’y–‘)
except:
print(‘less than 2 points!’)

plt.show()
return tmp

def DBscan(cluster_center,dmin,data,num,k,eps):

cluster_count = len(cluster_center) #初始化簇数为初始簇数目,若增加新簇,会递增其值

visited = []
visited_num = 0

cluster_result = []

cluster_set = []

for i in range(num):
visited.append(0) #取值为0表示没有被访问到,取值为1表示已经被访问到

if len(cluster_center) != 0: #如果初始值不为零,即有初始簇,那么要对初始簇顺序访问并对其成员集加入后面列表

for i in range(len(cluster_center)):
cluster_set.append([])
cluster_result.append([])
cluster_set[i].append(cluster_center[i])

for i in range(len(cluster_center)):
eps_neighborhood(data,cluster_set[i],eps,visited) #对每一个初始簇都逐项进行eps邻域查找
cluster_result[i] = cluster_set[i]
visited_num += 1 #已访问节点数+1

while visited_num!=num:

for key,value in enumerate(visited):
if value == 0:
visited_num += 1
visited[key] = 1 #未被访问且不在区域邻域中的节点为噪声点
tmp_seed = data[key]
seed_list = [tmp_seed]

tmp_cluster_set = []
tmp_cluster_set.append(tmp_seed)

eps_neighborhood(data,seed_list,eps,visited) #单点作为种子返回其邻域
cluster_result.append([])

if len(seed_list) >= dmin:
cluster_count += 1
noise_point = []

while len(seed_list) > 0: #剩余种子列表不为空则继续执行循环

seed_ind = seed_list.pop() #弹出一个种子节点并从种子列表中移除该节点

cluster_result[-1].append(seed_ind) #将种子节点加入到新簇中

if len(cluster_result[-1]) == k:
return cluster_result #进入结束条件,运行结束

neighbor_list = get_neighbor(data,seed_ind,eps)

if len(neighbor_list) < dmin : #如果邻域不满足,则为噪声点,加入噪声点列表
noise_point.append(seed_ind)
else:
for neighbor in neighbor_list: #若满足,则为密度可达点,在种子列表中新增识别的所有可达节点,并从密度可达点列表中移除他们
if visited[data.index(neighbor)] == 0: #如果未访问过则加入到种子列表中,并从未访问列表中删除该点
seed_list.append(neighbor)
visited[data.index(neighbor)] = 1

tmp_cluster_set.extend(noise_point)
cluster_set.append(tmp_cluster_set)

showCluster(cluster_result)

def showCluster(cluster_result):
cluster_num = len(cluster_result)
colorrtn = ['r', 'g', 'b', 'm', 'c', 'k','y','p','r','g','b','m','c','k','y','p','r','g','b','m','c','k','y','p']
marker_type = ['.', 'o', 'v', '^', '’, ‘1’, ‘2’, ‘3’, ‘4’, ‘8’, ‘s’, ‘p’, ‘*’, ‘h’, ‘H’, ‘+’, ‘x’]
lower_num = min(cluster_num,30)

for j in range(lower_num):
s=list(zip(*cluster_result[j])) #展开列表以便后续使用change_func展开为x和y两个列表
x,y=s
plt.plot(x,y,marker_type[j%15][0],colorrtn[j%15],markersize=5,markeredgecolor=’black’) #每个簇按不同颜色展示

def get_neighbor(data,tmp,eps): #寻找邻居节点列表
neighbor_list = []
dis_square = eps**2

for i in data: #遍历整个数据集寻找到eps邻域内的节点列表,放入邻居节点列表
if np.dot(np.array(i)-np.array(tmp),np.array(i)-np.array(tmp)) < dis_square:
neighbor_list.append(i)

return neighbor_list

def eps_neighborhood(data,tmp,eps,visited): #检索数据库寻找eps邻域内的节点编号并将其访问标志置为1,作为访问见过的标志
dis_square = eps**2 #平方半径
neighbor_ind = []

for i in range(len(data)):

if np.dot(np.array(data[i])-np.array(tmp),np.array(data[i])-np.array(tmp)) = k 程序结束。
#condition2 :所有节点都已经被访问过即 :visitedNum == num 程序结束。

start_time = time.time()
DBscan(clu_center,dmin,data,num,5,eps)
end_time = time.time()
print(“DBSCAN run time:”,end_time-start_time)

if __name__ == “__main__”:
print(‘program begin!’)
main()

# sys.exit是用来接管python exit()函数在用户终止程序时程序的退出。而signal.SIGINT则是一个信号值,表示捕获到ctrl+c。form brasileirao_match:
graph g{
n01 [label=”Athletico Paranaense” style=filled fillcolor=white]
n02 [label=”Santos” style=filled fillcolor=white]
n03 [label=”O Bhesa” style=filled fillcolor=white]
n04 [label=”America” style=filled fillcolor=white]
n05 [label=”Figueirense” style=filled fillcolor=white]
n06 [label=”Atletico Goianiense” style=filled fillcolor=white]
n07 [label=”Flamengo” style=filled fillcolor=white]
n08 [label=”Cruzeiro” style=filled fillcolor=white]
n09 [label=”Atletico Mineiro” style=filled fillcolor=white]
n10 [label=”Internacional” style=filled fillcolor=white]
n11 [label=”Athletico Goianiense” style=filled fillcolor=white]
n12 [label=”Chapecoense” style=filled fillcolor=white]
n13 [label=”Botafogo” style=filled fillcolor=white]
n14 [label=”Ceara SC” style=filled fillcolor=white]
n15 [label=”Paysandu” style=filled fillcolor=white]
n16 [label=”Gremio” style=filled fillcolor=white]
n17 [label=”Sao Paulo” style=filled fillcolor=