import argparse import numpy as np parser = argparse.ArgumentParser() parser.add_argument('task_num', type=int, help='Číslo úlohy') parser.add_argument('--numpy', action='store_true', help='Použít numpy') def _predict(data, weights): output = [] features_num = len(weights) - 1 for dato in data: predict = 0.0 for ind in range(features_num): predict += weights[ind] * dato[ind] # Bias predict += weights[-1] output.append(predict) return output def _parse_input(read_target=False): data_num, _ = [int(num) for num in input().split()] weights = [float(feature) for feature in input().split()] data = [] target = [] for _ in range(data_num): line = [float(feature) for feature in input().split()] if read_target: # Features + Bias data.append(line[:-1] + [1]) target.append(line[-1]) else: # Features + Bias data.append(line + [1]) if read_target: return data, target, weights else: return data, weights def task_predict(): data, weights = _parse_input(read_target=False) output = _predict(data, weights) for predict in output: print(predict) def task_mse(): data, target, weights = _parse_input(read_target=True) output = _predict(data, weights) mse = 0 for ind in range(len(target)): mse += (output[ind] - target[ind]) ** 2 mse /= len(target) print(mse) def tak_optimal_weights(): data, target, weights = _parse_input(read_target=True) output = _predict(data, weights) max_diff = 0 for idx_weight in range(len(weights)): diff = 0 for idx_data in range(len(data)): diff += (target[idx_data] - output[idx_data]) * data[idx_data][idx_weight] diff = abs(diff) max_diff = max(max_diff, diff) if max_diff > 1e-6: print("NE") else: print("ANO") def _parse_input_numpy(read_target=False): data = list(_parse_input(read_target=read_target)) for idx in range(len(data)): data[idx] = np.array(data[idx]) return data def task_predict_numpy(): data, weights = _parse_input_numpy(read_target=False) output = data @ weights for predict in output: print(predict) def task_mse_numpy(): data, target, weights = _parse_input_numpy(read_target=True) output = data @ weights mse = np.mean((output - target) ** 2) print(mse) def tak_optimal_weights_numpy(): data, target, weights = _parse_input_numpy(read_target=True) output = data @ weights max_diff = np.max(np.abs(data.T @ (target - output))) if max_diff > 1e-6: print("NE") else: print("ANO") if __name__ == "__main__": args = parser.parse_args() tasks: dict = {1: task_predict, 2: task_mse, 3: tak_optimal_weights} function = tasks[args.task_num] if args.numpy: # Zavolání funkce s příponou _numpy function = locals()[function.__name__ + '_numpy'] function()