Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

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()