Learning/SICP/exercise_1_7.py
2025-03-30 15:33:16 +02:00

56 lines
1.2 KiB
Python

import matplotlib.pyplot as plt
import numpy as np
import csv
import math
def read_csv(filename):
data = list()
header = None
with open(filename, "r") as file:
reader = csv.reader(file)
header = next(reader, None)
print(header)
for row in reader:
data.append([float(d) for d in row])
return header, data
def main(filename):
header, data = read_csv(filename)
x = [d[0] for d in data]
y = dict()
for h in range(1, len(header)):
y[header[h]] = list()
for d in data:
for idx in range(0, len(d)-1):
y[header[idx+1]].append(d[idx+1])
min_x = min(x)
max_x = max(x)
min_x_tick_power = math.floor(math.log10(min_x))
max_x_tick_power = math.ceil(math.log10(max_x))
xticks = [10**p for p in range(min_x_tick_power, max_x_tick_power)]
headers = list()
for key,value in y.items():
plt.plot(x, value)
headers.append(key)
plt.legend(["acc={}".format(h) for h in headers])
plt.xscale("log")
plt.grid(True)
plt.xlabel("Input to sqrt()")
plt.ylabel("Relative Error")
#plt.xticks(xticks)
plt.title("Relative error of sqrt()")
plt.show()
if __name__ == "__main__":
main("exercise_1_7_data.csv")