def strassen_matmult(N, alltogether=False): n = 2**N transformA = np.array(solver.transform_array(list(range(n * n)))).reshape( (n, n)) transformB = np.array(solver.transform_array(list(range(n * n)))).reshape( (n, n)) strassen_helper(transformA, transformB, alltogether=alltogether)
def matmult(n, alltogether=False): transformA = np.array(solver.transform_array(list(range(n * n)))).reshape( (n, n)) transformB = np.array(solver.transform_array(list(range(n * n)))).reshape( (n, n)) result = [] for i in range(n): row = [] for j in range(n): a_row = transformA[i, :] b_row = transformB[:, j] if alltogether: vals = np.multiply(a_row, b_row) row.append(solver.genop(vals, np.sum)) else: row.append(np.dot(a_row, b_row)) result.append(row)
import sys import numpy as np sys.path.append('..') import core.solver as solver from fft import fft_example from dct import dct_example from matmult import matmult, strassen_matmult # dct_example(3) # solver.render("dct.png") # matmult(2) # solver.render("matmult.png") # strassen_matmult(1) # solver.render("strassen.png") a = np.array(solver.transform_array([1, 2])) b = np.array(solver.transform_array([1, 2])) np.dot(a, b) solver.render("dot.png")
def convolve(n): transformA = np.array(solver.transform_array(list(range(n)))) transformB = np.array(solver.transform_array(list(range(n)))) np.convolve(transformA, transformB)
def conv_test(k, nout, n, nin, s): a = np.array(solver.transform_array([1 for i in range(nin * nout * k**2) ])).reshape(nout, nin, k, k) b = np.array(solver.transform_array([1 for i in range(nin * n**2) ])).reshape(nin, n, n) convolution(image=b, filt=a, s=s)
def dct_example(t): n = 2**t arr = np.array(solver.transform_array(range(n))) transform(arr)
def fft_example(t): transformA = np.array(solver.transform_array(list(range(2**t)))) fft(transformA)