diff --git a/C_numpy.py b/C_numpy.py new file mode 100644 index 0000000..f6fdfac --- /dev/null +++ b/C_numpy.py @@ -0,0 +1,72 @@ +class array: + def __init__(self, content): + def get_content(data): + rslt = [] + for i in data: + if isinstance(i, (list, tuple)): rslt.append(get_content(i)) + else: rslt.append(i) + return rslt + + def get_shape(data, shape=[]): + shape.append(len(data)) + if type(data[0]) == list: + get_shape(data[0], shape) + return shape + + def get_size(shape): + size = 1 + for i in shape: + size *= i + return size + + if type(content) == int: + self.content = content + self.shape = 0 + self.size = 1 + + else: + self.content = get_content(content) + self.shape= tuple(get_shape(self.content)) + self.size = get_size(self.shape) + + + def __str__(self): + msg = "[" + if len(self.shape) > 1: + msg += "\n".join([f"{i}, " for i in self.content]) + else: + msg += "".join([f"{i}, " for i in self.content]) + msg = msg[:-2] + "]" + return msg + + def __repr__(self): + msg = "array([" + if len(self.shape) > 1: + msg += "\n ".join([f"{i}, " for i in self.content]) + else: + msg += "".join([f"{i}, " for i in self.content]) + msg = msg[:-2] + "])" + return msg + + def __getitem__(self, index): + result = self.content[:] + for i in index: + if type(i) == int and type(result[0]) != int: + result = [a[i] for a in result] + else: + result = result[i] + + if type(result) == int: break + return array(result) + + def __get_column(self, col): + return array([content[col] for i in self.content]) + + def copy(self): + return array(self.content[:]) + + + +def linspace(start, stop, num=50): + step = (stop - start) / (num - 1) + return array([start + i * step for i in range(num)])