{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import itertools" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "c = 3" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# Generate some data\n", "np.random.seed(42)\n", "lambda1 = np.random.normal(size=(c, c))\n", "lambda2 = np.random.normal(size=(c, c))\n", "lambda3 = np.random.normal(size=(c, c))\n", "G1 = np.random.normal(size=(c, c, c))\n", "G2 = np.random.normal(size=(c, c, c))\n", "U = np.random.normal(size=(c, c, c, c))" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "def Z_naive(lambda1, lambda2, lambda3, G1, G2, U):\n", " c = lambda1.shape[0]\n", " Z = np.zeros(shape=(c, c, c, c))\n", " for a, b, c, d, e, f, g, h, i, j in itertools.product(*([range(c)]*10)):\n", " Z[a, h, i, j] += lambda1[a, b]*lambda2[d, e]*lambda3[g, h]*G1[c, b, d]*G2[f, e, g]*U[i, j, c, f]\n", " return Z" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "198 ms ± 30.6 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n" ] } ], "source": [ "%%timeit\n", "Z = Z_naive(lambda1, lambda2, lambda3, G1, G2, U)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(3, 3, 3, 3)" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Z = Z_naive(lambda1, lambda2, lambda3, G1, G2, U)\n", "Z.shape" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.3" } }, "nbformat": 4, "nbformat_minor": 2 }