форкнуто от main/python-labs
Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
91 строка
3.3 KiB
Python
91 строка
3.3 KiB
Python
#27
|
|
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
import pickle
|
|
import os
|
|
import random
|
|
from statistics import mean
|
|
|
|
def функция1(выборка):
|
|
"""Поиск индексов min и max элементов"""
|
|
if not выборка:
|
|
return -1, -1
|
|
|
|
min_idx = выборка.index(min(выборка))
|
|
max_idx = выборка.index(max(выборка))
|
|
return min_idx, max_idx
|
|
|
|
def функция2(выборка, N):
|
|
"""Разделение на группы и расчет средних"""
|
|
if N <= 0:
|
|
return []
|
|
|
|
средние = []
|
|
for i in range(0, len(выборка), N):
|
|
группа = выборка[i:i+N]
|
|
средние.append(mean(группа))
|
|
|
|
return средние
|
|
|
|
def M2():
|
|
while True:
|
|
имя_файла = input("Введите имя бинарного файла: ")
|
|
if os.path.exists(имя_файла):
|
|
break
|
|
print("Файл не найден!")
|
|
|
|
with open(имя_файла, 'rb') as f:
|
|
выборка = pickle.load(f)
|
|
|
|
min_idx, max_idx = функция1(выборка)
|
|
print(f"Индекс min: {min_idx}, значение: {выборка[min_idx]}")
|
|
print(f"Индекс max: {max_idx}, значение: {выборка[max_idx]}")
|
|
print(f"Число элементов: {len(выборка)}")
|
|
|
|
N = int(input("Введите число элементов в группе: "))
|
|
средние = функция2(выборка, N)
|
|
print(f"Средние по группам: {средние}")
|
|
|
|
# График
|
|
plt.figure(figsize=(10, 6))
|
|
plt.plot(выборка, 'b.-', alpha=0.7)
|
|
plt.title('Исходная выборка')
|
|
plt.xlabel('Индекс')
|
|
plt.ylabel('Значение')
|
|
plt.grid(True)
|
|
plt.show()
|
|
|
|
return выборка, min_idx, max_idx, средние
|
|
|
|
def M0():
|
|
выборка, min_idx, max_idx, средние = M2()
|
|
print(f"Min: {выборка[min_idx]} (индекс {min_idx})")
|
|
print(f"Max: {выборка[max_idx]} (индекс {max_idx})")
|
|
print(f"Средние по группам: {средние}")
|
|
|
|
def создать_тестовые_файлы():
|
|
# Первый файл
|
|
данные1 = [random.gauss(0, 1) for _ in range(30)]
|
|
with open('выборка1_M3_27.bin', 'wb') as f:
|
|
pickle.dump(данные1, f)
|
|
|
|
# Второй файл
|
|
данные2 = [random.uniform(-5, 5) for _ in range(25)]
|
|
with open('выборка2_M3_27.bin', 'wb') as f:
|
|
pickle.dump(данные2, f)
|
|
|
|
# Пример запуска
|
|
if __name__ == "__main__":
|
|
print("=== M3_27: Анализ выборки с группировкой ===")
|
|
создать_тестовые_файлы()
|
|
print("Созданы тестовые файлы: выборка1_M3_27.bin и выборка2_M3_27.bin")
|
|
|
|
# Тестовый пример
|
|
тест_выборка = [1, 5, 3, 8, 2, 7, 4, 6]
|
|
min_idx, max_idx = функция1(тест_выборка)
|
|
средние = функция2(тест_выборка, 3)
|
|
print(f"Тестовая выборка: {тест_выборка}")
|
|
print(f"Min индекс: {min_idx}, Max индекс: {max_idx}")
|
|
print(f"Средние по группам: {средние}")
|
|
|
|
M0() |