В лаборатории проводится эксперимент, состоящий из множества испытаний. Результат каждого испытания представляется в виде пары чисел. Для визуализации результатов эта пара рассматривается как координаты точки на плоскости, и на чертеже отмечаются точки, соответствующие всем испытаниям.
По результатам эксперимента проводится кластеризация полученных результатов: на плоскости выделяется несколько кластеров — прямоугольников размером $3 \times 3$ так, что каждая точка попадает ровно в один кластер.
Центроидом кластера называется та из входящих в него точек, для которой минимальна сумма расстояний до всех остальных точек кластера.
Обработка результатов эксперимента включает следующие шаги:
1) кластер, содержащий наименьшее число точек, исключается;
2) определяются центроиды всех оставшихся кластеров;
3) для найденных центроидов вычисляется средняя точка.
Средней для группы точек называется точка (не обязательно входящая в группу), координаты которой определяются как средние арифметические значения координат всех точек группы.
В файле записан протокол проведения эксперимента. Каждая строка файла содержит два числа: координаты X и Y точки, соответствующей одному испытанию. По данному протоколу надо определить среднюю точку центроидов всех кластеров за исключением содержащего наименьшее число точек.
Вам даны два входных файла (A и B), каждый из которых имеет описанную выше структуру. По данным каждого из представленных файлов определите координаты средней точки по описанным выше правилам.
В ответе запишите четыре числа: сначала (в первой строке) координаты X и Y средней точки для файла A, затем (во второй строке) координаты X и Y средней точки для файла B.
В качестве значения координаты указывайте целую часть от умножения числового значения координаты на 10 000.
Задание 27 (А)
Задание 27 (Б)
Ответ:
По результатам эксперимента проводится кластеризация полученных результатов: на плоскости выделяется несколько кластеров — прямоугольников размером $3 \times 3$ так, что каждая точка попадает ровно в один кластер.
Центроидом кластера называется та из входящих в него точек, для которой минимальна сумма расстояний до всех остальных точек кластера.
Обработка результатов эксперимента включает следующие шаги:
1) кластер, содержащий наименьшее число точек, исключается;
2) определяются центроиды всех оставшихся кластеров;
3) для найденных центроидов вычисляется средняя точка.
Средней для группы точек называется точка (не обязательно входящая в группу), координаты которой определяются как средние арифметические значения координат всех точек группы.
В файле записан протокол проведения эксперимента. Каждая строка файла содержит два числа: координаты X и Y точки, соответствующей одному испытанию. По данному протоколу надо определить среднюю точку центроидов всех кластеров за исключением содержащего наименьшее число точек.
Вам даны два входных файла (A и B), каждый из которых имеет описанную выше структуру. По данным каждого из представленных файлов определите координаты средней точки по описанным выше правилам.
В ответе запишите четыре числа: сначала (в первой строке) координаты X и Y средней точки для файла A, затем (во второй строке) координаты X и Y средней точки для файла B.
В качестве значения координаты указывайте целую часть от умножения числового значения координаты на 10 000.
Задание 27 (А)
Задание 27 (Б)
Ответ:
💡 Пошаговый разбор и решение:
Построим диаграммы для файла А и Б. Для этого воспользуемся табличным редактором.
Для файла А:
[рис.]
Для файла Б:
[рис.]
Диаграмма для файла А:
[рис.]
Диаграмма для файла Б:
[рис.]
Приведём решение на языке Python для файла А.
f = open('27A.txt')
m = []
claster = [[] for i in range(3)]
for s in f:
x,y = [float(c) for c in s.split()]
m.append([x,y])
if -1 Приведём решение на языке Python для файла Б.
f = open('27B.txt')
m = []
claster = [[] for i in range(5)]
for s in f:
x,y = [float(c) for c in s.split()]
m.append([x,y])
if -2.5 файла A ответ — 9877 55816, из файла B — 26104 34664.
Приведём решение Юрия Красильникова на языке Python.
def centroid(cluster):
sumdist = [sum([dist(star1,star2) for star1 in cluster]) for star2 in cluster]
return cluster[sumdist.index(min(sumdist))]
from math import dist
f = open('27A.csv')
f.readline() # Читаем (и игнорируем) строку с заголовками столбцов (X Y).
stars = [tuple(map(float,s.replace(',','.').split(';'))) for s in f]
radius = 0.5
clusters = []
while stars:
cluster = [stars.pop()]
for c in cluster:
near = [s for s in stars if dist(c,s) < radius]
cluster += near
for n in near: stars.remove(n)
clusters.append(cluster)
print('кластеров:',len(clusters),'; точек:',*[len(c) for c in clusters])
clen=[len(c) for c in clusters]
del clusters[clen.index(min(clen))]
centers = [centroid(c) for c in clusters]
answer = [int(sum([c[i] for c in centers]) / len(centers) * 10000) for i in range(2)]
print( *answer )
Для файла А:
[рис.]
Для файла Б:
[рис.]
Диаграмма для файла А:
[рис.]
Диаграмма для файла Б:
[рис.]
Приведём решение на языке Python для файла А.
f = open('27A.txt')
m = []
claster = [[] for i in range(3)]
for s in f:
x,y = [float(c) for c in s.split()]
m.append([x,y])
if -1 Приведём решение на языке Python для файла Б.
f = open('27B.txt')
m = []
claster = [[] for i in range(5)]
for s in f:
x,y = [float(c) for c in s.split()]
m.append([x,y])
if -2.5 файла A ответ — 9877 55816, из файла B — 26104 34664.
Приведём решение Юрия Красильникова на языке Python.
def centroid(cluster):
sumdist = [sum([dist(star1,star2) for star1 in cluster]) for star2 in cluster]
return cluster[sumdist.index(min(sumdist))]
from math import dist
f = open('27A.csv')
f.readline() # Читаем (и игнорируем) строку с заголовками столбцов (X Y).
stars = [tuple(map(float,s.replace(',','.').split(';'))) for s in f]
radius = 0.5
clusters = []
while stars:
cluster = [stars.pop()]
for c in cluster:
near = [s for s in stars if dist(c,s) < radius]
cluster += near
for n in near: stars.remove(n)
clusters.append(cluster)
print('кластеров:',len(clusters),'; точек:',*[len(c) for c in clusters])
clen=[len(c) for c in clusters]
del clusters[clen.index(min(clen))]
centers = [centroid(c) for c in clusters]
answer = [int(sum([c[i] for c in centers]) / len(centers) * 10000) for i in range(2)]
print( *answer )
Правильный ответ:
9877&55816&26104&34664
📚 Похожие разобранные задания по предмету:
ID 31564 • Задание №11
Производится одноканальная (моно) звукозапись с частотой дискретизации 16 кГц и 32-битным разрешением. Запись ...
ID 34562 • Задание №26
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, п...
🔗 Другие задания линии №27 по предмету Информатика:
ID 34669
Имеется набор данных, состоящий из пар положительных целых чисел. Необходимо выбрать из каждой ...
ID 34670
Последовательность натуральных чисел характеризуется числом Х — наибольшим числом, кратным 14 ...
ID 34671
На вход программы поступает последовательность из N целых положительных чисел. Рассматриваются ...
ID 34672
Дана последовательность N целых положительных чисел. Рассматриваются все пары элементов последо...
ID 34673
На вход программы поступает последовательность из N натуральных чисел. Рассматриваются все пары...