{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/PyLops/pylops_transform2022/HEAD?labpath=PyLops_v2.ipynb)\n", "\n", "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/PyLops/pylops_transform2022/blob/main/PyLops_v2.ipynb)" ] }, { "cell_type": "markdown", "metadata": { "id": "fvzDiWgxrEbB" }, "source": [ "# Building Operators in PyLops V2: What's New? \n", "\n", "**Author: C. Costa, PyLops Dev Team**" ] }, { "cell_type": "markdown", "metadata": { "id": "JXwvtkqirEbE" }, "source": [ "The aim of this second tutorial is to introduce you to some features in our latest creation (still in the making): **PyLops V2**\n", "\n", "As any new Major version, there will be breaking changes! \n", "\n", "Nevetheless, this is the very first time since the initial creation of PyLops that we decided to sit back and revisit some the early design choices. We hope the benefit introduced by such changes outweights the pain of making a few changes to your codes.\n", "\n", "In the following we want to give you a taste of some new features and highlight along the way if (and how) these have required breaking changes.\n", "\n", "For more details on how to quickly migrate your PyLops v1.x codes into PyLops v2.x codes please refer to this [document](https://github.com/PyLops/pylops/blob/dev/MIGRATION_V1_V2.md)." ] }, { "cell_type": "markdown", "metadata": { "id": "hvtyDt5KrEbF" }, "source": [ "## Useful links\n", "\n", "- Tutorial Github repository: https://github.com/PyLops/pylops_transform2022\n", " \n", "- PyLops Github repository: https://github.com/PyLops/pylops\n", "\n", "- PyLops reference documentation: https://pylops.readthedocs.io/en/latest/" ] }, { "cell_type": "markdown", "metadata": { "id": "d4BKiX3mrEbG" }, "source": [ "## Let's Get Shifty\n", "\n", "To get started, let's suppose we want to implement a simple shift operator.\n", "Stating the problem more descriptively, we want an operator that\n", "\n", "1. Depends on a (possibly fractional) parameter `shift`\n", "2. Can be applied to a vector along a certain given `axis`.\n", "3. A positive `shift` should shift the vector to the right; a negative `shift` to the left.\n", "4. The shift is not circular, that is, when shifting to the right, the last samples will not appear in the beginning of the array.\n", "\n", "PyLops already features a much fancier [Shift operator](https://pylops.readthedocs.io/en/stable/api/generated/pylops.signalprocessing.Shift.html) that works in the Fourier domain, but it is circular.\n", "Numpy offers the `roll` function, but on its own, it does not support fractional shifts and is also circular.\n", "Note that both of these options could be made non-circular by padding, but for now we're gonna \"roll\" our own! 😉\n", "\n", "\n", "---------------------\n", "\n", "Before we jump on creating the operator, let's code a function to do the shift.\n", "After we have the workhorse, it will be easier to write the boilerplate code required for the `LinearOperator`." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "uumt2jRqrI_L", "outputId": "141a4b16-64cf-45f7-fad0-93260ceb87e4" }, "outputs": [], "source": [ "!pip install --upgrade git+https://github.com/PyLops/pylops.git@dev numba==0.55.1" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "id": "rVj---WSrEbG" }, "outputs": [], "source": [ "%matplotlib inline\n", "\n", "import logging\n", "import matplotlib.pyplot as plt\n", "import numba\n", "import numpy as np\n", "import numpy.typing as npt\n", "import pylops\n", "\n", "from typing import Tuple\n", "\n", "logger = logging.getLogger()\n", "logger.setLevel(logging.INFO)\n", "try:\n", " import cupy as cp # Remove if no GPU\n", "except ImportError:\n", " logger.warning(\"Could not import CuPy\")\n", "\n", "plt.style.use('tableau-colorblind10')\n", "np.random.seed(0)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "x6gkOnozv0Pj", "outputId": "4fd3bb10-4164-4dee-edc5-1f805d465085" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "numba : 0.55.1\n", "google : 2.0.3\n", "matplotlib: 3.5.1\n", "numpy : 1.21.5\n", "IPython : 5.5.0\n", "cupy : 9.4.0\n", "pylops : 1.13.1.dev405+g7eda999\n", "\n", "Watermark: 2.3.0\n", "\n" ] } ], "source": [ "#!pip install -q --upgrade watermark\n", "#%load_ext watermark\n", "#%watermark --iversions -w" ] }, { "cell_type": "markdown", "metadata": { "id": "K8BNlzHcrEbI" }, "source": [ "We're going to start with an integer-based shifting function, which we will exploit later to convert into a fractional shifter. We want this function to be pretty fast, so we're going to pad the original array and pad it with the correct number of zeros.\n", "\n", "
\n", "\n", "\n", "
\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "EKKC25SFrEbI", "outputId": "85a6f5c6-da35-4d41-ec16-dc025a43ebf5" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Original array: [1. 2. 3. 4. 5. 6. 7. 8. 9.]\n", "Positive shift: [0. 0. 0. 1. 2. 3. 4. 5. 6.]\n", "Negative shift: [4. 5. 6. 7. 8. 9. 0. 0. 0.]\n", "No shift : [1. 2. 3. 4. 5. 6. 7. 8. 9.]\n", "Big pos. shift: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", "Big neg. shift: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n" ] } ], "source": [ "# Original array\n", "x = 1.0 + np.arange(9)\n", "\n", "print(\"Original array:\", x)\n", "\n", "# Tests for our (integer) shifting method\n", "shift = 3\n", "shifted = np.concatenate((np.zeros(shift), x[:-shift]))\n", "print(\"Positive shift:\", shifted)\n", "\n", "shift = -3\n", "shifted = np.concatenate((x[-shift:], np.zeros(-shift)))\n", "print(\"Negative shift:\", shifted)\n", "\n", "shift = 0\n", "shifted = np.concatenate((x[-shift:], np.zeros(-shift)))\n", "print(\"No shift :\", shifted)\n", "\n", "shift = 12\n", "shifted = np.concatenate((np.zeros(shift), x[:-shift])) # Oops!!\n", "print(\"Big pos. shift:\", shifted)\n", "\n", "shift = -12\n", "shifted = np.concatenate((x[-shift:], np.zeros(-shift))) # Oops!!\n", "print(\"Big neg. shift:\", shifted)" ] }, { "cell_type": "markdown", "metadata": { "id": "Np6MOMTurEbK" }, "source": [ "Now that we know what to do, we can package it into a simple 1D function." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "lthU4sVprEbK", "outputId": "485e2bf3-9b3f-4f18-c949-29165bde23ef" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0. 0. 0. 1. 2. 3. 4. 5. 6.]\n", "[4. 5. 6. 7. 8. 9. 0. 0. 0.]\n", "[1. 2. 3. 4. 5. 6. 7. 8. 9.]\n", "[0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", "[0. 0. 0. 0. 0. 0. 0. 0. 0.]\n" ] } ], "source": [ "def shift1d(x: npt.NDArray, shift: int):\n", " shift = max(\n", " min(shift, len(x)), -len(x)\n", " ) # Fix the oops: ensure shift between -len(x) and len(x)]\n", " if shift > 0:\n", " return np.concatenate((np.zeros(shift), x[:-shift]))\n", " else:\n", " return np.concatenate((x[-shift:], np.zeros(-shift)))\n", "\n", "\n", "for shift in [3, -3, 0, 12, -12]: # This should be probably be a unit test...\n", " print(shift1d(x, shift))" ] }, { "cell_type": "markdown", "metadata": { "id": "A08Ip7VIrEbL" }, "source": [ "Looking good! Now we need to make sure this works for N-dimensional arrays.\n", "The trick here is to rely on swapaxes (it returns a view, cheap!) and the ellipsis notation.\n", "Let's have a go:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "XiNGPNUrrEbL", "outputId": "2d511cf8-4c95-46aa-ad07-d7c368042a9e" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(2, 3, 9)\n" ] }, { "data": { "text/plain": [ "array([[[1., 2., 3., 4., 5., 6., 7., 8., 9.],\n", " [1., 2., 3., 4., 5., 6., 7., 8., 9.],\n", " [1., 2., 3., 4., 5., 6., 7., 8., 9.]],\n", "\n", " [[1., 2., 3., 4., 5., 6., 7., 8., 9.],\n", " [1., 2., 3., 4., 5., 6., 7., 8., 9.],\n", " [1., 2., 3., 4., 5., 6., 7., 8., 9.]]])" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x_3d = np.tile(x, (2, 3, 1))\n", "print(x_3d.shape)\n", "x_3d" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "_U3B8sNLrEbM", "outputId": "d0b196a5-8ca6-498e-c47d-98951f39fef2" }, "outputs": [ { "data": { "text/plain": [ "array([[[0., 0., 0., 0., 1., 2., 3., 4., 5.],\n", " [0., 0., 0., 0., 1., 2., 3., 4., 5.],\n", " [0., 0., 0., 0., 1., 2., 3., 4., 5.]],\n", "\n", " [[0., 0., 0., 0., 1., 2., 3., 4., 5.],\n", " [0., 0., 0., 0., 1., 2., 3., 4., 5.],\n", " [0., 0., 0., 0., 1., 2., 3., 4., 5.]]])" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "shift = 4\n", "axis = -1 # Last axis\n", "\n", "x_3d_tmp = np.swapaxes(x_3d, axis, -1) # It's view, chill\n", "x_3d_crop = x_3d_tmp[..., :-shift] # Same as x_3d_tmp[:, :, :-shift] for 3D arrays\n", "\n", "pad_shape = list(x_3d.shape)\n", "pad_shape[-1] = abs(shift)\n", "pad = np.zeros(pad_shape)\n", "\n", "shifted = np.concatenate((pad, x_3d_crop), axis=-1) # Beware, default is axis=0!\n", "shifted" ] }, { "cell_type": "markdown", "metadata": { "id": "64_c_JHQrEbM" }, "source": [ "Packaging it:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "T44TpVOFrEbM", "outputId": "30b15ebb-44ac-49d3-f97f-e370413502a6" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Shift = 1\n", "Axis = 0 :\n", "[[[0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", " [0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", " [0. 0. 0. 0. 0. 0. 0. 0. 0.]]\n", "\n", " [[1. 2. 3. 4. 5. 6. 7. 8. 9.]\n", " [1. 2. 3. 4. 5. 6. 7. 8. 9.]\n", " [1. 2. 3. 4. 5. 6. 7. 8. 9.]]]\n", "Axis = -1:\n", "[[[0. 1. 2. 3. 4. 5. 6. 7. 8.]\n", " [0. 1. 2. 3. 4. 5. 6. 7. 8.]\n", " [0. 1. 2. 3. 4. 5. 6. 7. 8.]]\n", "\n", " [[0. 1. 2. 3. 4. 5. 6. 7. 8.]\n", " [0. 1. 2. 3. 4. 5. 6. 7. 8.]\n", " [0. 1. 2. 3. 4. 5. 6. 7. 8.]]]\n", "\n", "Shift = 0\n", "Axis = 0 :\n", "[[[1. 2. 3. 4. 5. 6. 7. 8. 9.]\n", " [1. 2. 3. 4. 5. 6. 7. 8. 9.]\n", " [1. 2. 3. 4. 5. 6. 7. 8. 9.]]\n", "\n", " [[1. 2. 3. 4. 5. 6. 7. 8. 9.]\n", " [1. 2. 3. 4. 5. 6. 7. 8. 9.]\n", " [1. 2. 3. 4. 5. 6. 7. 8. 9.]]]\n", "Axis = -1:\n", "[[[1. 2. 3. 4. 5. 6. 7. 8. 9.]\n", " [1. 2. 3. 4. 5. 6. 7. 8. 9.]\n", " [1. 2. 3. 4. 5. 6. 7. 8. 9.]]\n", "\n", " [[1. 2. 3. 4. 5. 6. 7. 8. 9.]\n", " [1. 2. 3. 4. 5. 6. 7. 8. 9.]\n", " [1. 2. 3. 4. 5. 6. 7. 8. 9.]]]\n", "\n", "Shift = -2\n", "Axis = 0 :\n", "[[[0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", " [0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", " [0. 0. 0. 0. 0. 0. 0. 0. 0.]]\n", "\n", " [[0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", " [0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", " [0. 0. 0. 0. 0. 0. 0. 0. 0.]]]\n", "Axis = -1:\n", "[[[3. 4. 5. 6. 7. 8. 9. 0. 0.]\n", " [3. 4. 5. 6. 7. 8. 9. 0. 0.]\n", " [3. 4. 5. 6. 7. 8. 9. 0. 0.]]\n", "\n", " [[3. 4. 5. 6. 7. 8. 9. 0. 0.]\n", " [3. 4. 5. 6. 7. 8. 9. 0. 0.]\n", " [3. 4. 5. 6. 7. 8. 9. 0. 0.]]]\n", "\n" ] } ], "source": [ "def shiftnd(x: npt.NDArray, shift: int, axis: int = -1):\n", " if shift > x.shape[axis] or shift < -x.shape[axis]:\n", " return np.zeros_like(x)\n", " x = np.swapaxes(x, axis, -1) # Relax, original x is unchanged\n", " pad = np.zeros((*x.shape[:-1], abs(shift)))\n", " if shift > 0:\n", " out = np.concatenate((pad, x[..., :-shift]), axis=-1)\n", " else:\n", " out = np.concatenate((x[..., -shift:], pad), axis=-1)\n", " return np.swapaxes(out, axis, -1)\n", "\n", "\n", "for shift in [1, 0, -2]: # This should be definitely be a unit test...\n", " print(f\"Shift = {shift}\")\n", " print(\"Axis = 0 :\")\n", " print(shiftnd(x_3d, shift, axis=0))\n", " print(\"Axis = -1:\")\n", " print(shiftnd(x_3d, shift, axis=-1))\n", " print()" ] }, { "cell_type": "markdown", "metadata": { "id": "nnMWEc-7rEbN" }, "source": [ "We're almost done. We figured out how to shift by an integer amount in either direction. To shift a fractional amount, we will linearly interpolate the result of shifting by the floor and ceil of the fractional shift! Let $L_\\delta$ represent the fractional shift operator by $\\delta$ shift, and let $S_\\delta$ represent the integer shift operator by $\\delta$. Let $w = \\delta - ⌊\\delta⌋$ represent the fractional amount of the shift.\n", "\n", "$$\n", "L_\\delta x \\equiv (1 - w) S_{⌊\\delta⌋}x + w S_{⌈\\delta⌉}\n", "$$" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "4TCmU2vDrEbN", "outputId": "48fdcb86-0206-4505-8108-2ed6f552d148" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1. 2. 3. 4. 5. 6. 7. 8. 9.]\n", "[0. 0. 0.9 1.9 2.9 3.9 4.9 5.9 6.9]\n", "[0. 0. 0. 0. 0. 0. 0. 0. 1.]\n", "[0. 0. 0. 0. 0. 0. 0. 0. 0.1]\n", "[0. 0. 0. 0. 0. 0. 0. 0. 0.]\n" ] } ], "source": [ "def shiftnd_linear(x: npt.NDArray, shift: float, axis: int = -1):\n", " shift_floor = int(np.floor(shift))\n", " w = shift - shift_floor\n", " return (1 - w) * shiftnd(x, shift_floor, axis) + w * shiftnd(\n", " x, shift_floor + 1, axis\n", " )\n", "\n", "\n", "print(x)\n", "print(shiftnd_linear(x, 2.1))\n", "print(shiftnd_linear(x, 8))\n", "print(shiftnd_linear(x, 8.9))\n", "print(shiftnd_linear(x, 9))" ] }, { "cell_type": "markdown", "metadata": { "id": "PsEHsV7KrEbO" }, "source": [ "## A Simple `LinearOperator`\n", "\n", "In this section we will take what we learned about shifting and package that in a `LinearOperator` class.\n", "What follows is a fairly generic template that can serve as a basis for implementing a wide array of linear operators." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "id": "8uaZorqtrEbO" }, "outputs": [], "source": [ "class LinearShift(pylops.LinearOperator):\n", " \"\"\"LinearShift shifts an N-dimensional array by a single real value along a given axis.\n", "\n", " Since we are responsible coders, this is the entirety of our very long\n", " and detailed documentation for this class. At least we're annotating...\n", " \"\"\"\n", "\n", " def __init__(\n", " self,\n", " shift: float,\n", " dims: Tuple[int, ...],\n", " axis: int = -1,\n", " dtype: npt.DTypeLike = np.float32,\n", " name: str = \"L\", # Not required but good practice since v2.0.0\n", " ):\n", " # We need to store these variables for computing the shifts\n", " self.shift = shift\n", " self.axis = axis\n", "\n", " # Every operator needs a dtype and a shape. Since v2.0.0, we can instead give\n", " # dims (model shape) *and* dimsd (data shape). `self.shape` is automatically\n", " # inferred as (np.prod(dimsd), np.prod(dims)).\n", " # Calling `super()` will also populate `self.clinear` (defaults to True) and\n", " # `self.explicit` (defaults to False). See the latest documentation:\n", " # https://pylops.readthedocs.io/en/latest/api/generated/pylops.LinearOperator.html\n", " super().__init__(dtype=dtype, dims=dims, dimsd=dims, name=name)\n", "\n", " def _matvec(self, x: npt.NDArray):\n", " x = x.reshape(self.dims)\n", " y = shiftnd_linear(x, shift=self.shift, axis=self.axis)\n", " y = y.ravel()\n", " return y" ] }, { "cell_type": "markdown", "metadata": { "id": "fzMFZWBbrEbO" }, "source": [ " In the new version, we use the name of the operator to `describe` it: " ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 57 }, "id": "TMIpJC6arEbO", "outputId": "18680c36-fd59-4466-e89f-ab8c4cab2135" }, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle L$" ], "text/plain": [ "L" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "where: {'L': 'LinearShift'}\n" ] } ], "source": [ "from pylops.utils.describe import describe\n", "\n", "\n", "LOp = LinearShift(0.5, dims=x_3d.shape)\n", "describe(LOp)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "uAde_-PYrEbP", "outputId": "1e0fd95b-4646-474f-cab9-46ee5085b7e8" }, "outputs": [ { "data": { "text/plain": [ "array([[[0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5],\n", " [0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5],\n", " [0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5]],\n", "\n", " [[0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5],\n", " [0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5],\n", " [0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5]]])" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Taking it for a spin\n", "shifted = (LOp @ x_3d.ravel()).reshape(LOp.dimsd)\n", "shifted" ] }, { "cell_type": "markdown", "metadata": { "id": "d5M_097ErEbP" }, "source": [ "Great! But what if we try the following?" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "fCvpbfmtrEbP", "outputId": "4fa02a2d-069f-4552-9343-68d00c2c68c2" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Oops!\n" ] } ], "source": [ "try:\n", " LOp.T @ shifted.ravel()\n", "except AttributeError:\n", " print(\"Oops!\")" ] }, { "cell_type": "markdown", "metadata": { "id": "jz7P4udHrEbQ" }, "source": [ "This is because we need to define both the forward and the adjoint. The good news for us is that the adjoint should just be a negative shift." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "-tk6FvWPrEbQ", "outputId": "00788517-30bb-45c5-bea5-5d69cea857f7" }, "outputs": [ { "data": { "text/plain": [ "array([[[1. , 2. , 3. , 4. , 5. , 6. , 7. , 8. , 4.25],\n", " [1. , 2. , 3. , 4. , 5. , 6. , 7. , 8. , 4.25],\n", " [1. , 2. , 3. , 4. , 5. , 6. , 7. , 8. , 4.25]],\n", "\n", " [[1. , 2. , 3. , 4. , 5. , 6. , 7. , 8. , 4.25],\n", " [1. , 2. , 3. , 4. , 5. , 6. , 7. , 8. , 4.25],\n", " [1. , 2. , 3. , 4. , 5. , 6. , 7. , 8. , 4.25]]])" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class LinearShift(pylops.LinearOperator):\n", " \"\"\"LinearShift shifts an N-dimensional array by a single real value along a given axis.\n", "\n", " Since we are responsible coders, this is the entirety of our very long\n", " and detailed documentation for this class. At least we're annotating...\n", " \"\"\"\n", "\n", " def __init__(\n", " self,\n", " shift: float,\n", " dims: Tuple[int, ...],\n", " axis: int = -1,\n", " dtype: npt.DTypeLike = np.float32,\n", " name: str = \"L\", # Not required but good practice since v2.0.0\n", " ):\n", " # We need to store these variables for computing the shifts\n", " self.shift = shift\n", " self.axis = axis\n", "\n", " # Every operator needs a dtype and a shape. Since v2.0.0, we can instead give\n", " # dims (model shape) *and* dimsd (data shape). `self.shape` is automatically\n", " # calculated as (np.prod(dimsd), np.prod(dims)).\n", " # Calling `super()` will also populate `self.clinear` (defaults to True) and\n", " # `self.explicit` (defaults to False). See the latest documentation:\n", " # https://pylops.readthedocs.io/en/latest/api/generated/pylops.LinearOperator.html\n", " super().__init__(dtype=dtype, dims=dims, dimsd=dims, name=name)\n", "\n", " def _matvec(self, x: npt.NDArray):\n", " x = x.reshape(self.dims)\n", " y = shiftnd_linear(x, shift=self.shift, axis=self.axis)\n", " y = y.ravel()\n", " return y\n", "\n", " def _rmatvec(self, y: npt.NDArray):\n", " y = y.reshape(self.dimsd)\n", " # negative shift!\n", " x = shiftnd_linear(y, shift=-self.shift, axis=self.axis)\n", " x = x.ravel()\n", " return x\n", "\n", "\n", "# Taking it for a spin\n", "LOp = LinearShift(0.5, dims=x_3d.shape)\n", "shifted_back = (LOp.T @ shifted.ravel()).reshape(LOp.dimsd)\n", "shifted_back" ] }, { "cell_type": "markdown", "metadata": { "id": "c5q8NwIxrEbQ" }, "source": [ "Are we done now? Nope! We need to ensure that the operations in `_matvec` and `_rmatvec` are actually transposes of each other. To do so, we can use the [`dottest`](https://pylops.readthedocs.io/en/latest/api/generated/pylops.utils.dottest.html) utility function." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "Osnv0zh0rEbQ", "outputId": "9da28a64-eb74-463e-848a-6d947cba326e" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Dot test passed, v^H(Opu)=-1.8444506555541245 - u^H(Op^Hv)=-1.844450655554124\n" ] }, { "data": { "text/plain": [ "True" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pylops.utils import dottest\n", "\n", "dottest(LOp, verb=True, raiseerror=True)" ] }, { "cell_type": "markdown", "metadata": { "id": "9IAXekvmrEbQ" }, "source": [ "Since it passes the dot test, we're done!" ] }, { "cell_type": "markdown", "metadata": { "id": "ts0N0wwlrEbR" }, "source": [ "Interestingly enough, we see saw that applying the adjoint in succession to the forward is not an inverse" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 57 }, "id": "biq89j4vrEbR", "outputId": "c6dbc86b-15e2-4134-f49d-3322a039fc1b" }, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle L^{T} L$" ], "text/plain": [ "L.T*L" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "where: {'L': 'LinearShift'}\n" ] } ], "source": [ "describe(LOp.T @ LOp)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "XGVXG1d8rEbR", "outputId": "ed0acd09-1de1-4df3-fc89-ae2644b3a7cf" }, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "shifted_back_adj = (LOp.T @ LOp @ x_3d.ravel()).reshape(x_3d.shape)\n", "np.allclose(shifted_back_adj, x_3d)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 17, "referenced_widgets": [ "17fe01e151c14d2cb7a7fb6c46d23a32" ] }, "id": "6n93iNbBrEbR", "outputId": "a1c11263-e7dd-46cf-f57a-bab48a0d6388" }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "478d4a7f41ec43ffb5fd450979dc4b26", "version_major": 2, "version_minor": 0 }, "image/png": "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", "text/html": [ "\n", "
\n", "
\n", " Figure\n", "
\n", " \n", "
\n", " " ], "text/plain": [ "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(12, 5))\n", "ax.plot(x_3d[0, 0, :], label=r\"$x$\")\n", "ax.plot(shifted_back_adj[0, 0, :], \"--\", label=\"$L^T L x$\")\n", "ax.legend(loc=2)\n", "fig.tight_layout()" ] }, { "cell_type": "markdown", "metadata": { "id": "3hY8ejvarEbR" }, "source": [ "Of course, when we have values at the edges and shift them out of the array we lose them. So in a way, the operator will never have a true inverse.\n", "But we can use solvers to aid us in filling this null space.\n", "In this case, the least-squares solution we get is the following:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "id": "myGas9kRrEbS" }, "outputs": [], "source": [ "shifted_back_lsqr = (LOp / shifted.ravel()).reshape(LOp.dimsd)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 17, "referenced_widgets": [ "5a0f1c5b6bb04e688b01e714ff9a4b79" ] }, "id": "ZnUBXioGrEbS", "outputId": "b568c873-f90e-4e13-af5f-d857e968de2b" }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "c8ecf9545e8f4df194a2abf412087c95", "version_major": 2, "version_minor": 0 }, "image/png": "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pZdeolGjRvj6+tK4cWP+9Kc/3fa9AstapS9Yn332GePGjWPSpEkkJyfTtm1b+vbtS0ZGhtXRylReXh5t27blnXfesTpKuVu/fj0jR45k69atrFy5kuLiYvr06UNeXp7V0cpU/fr1ef3119mxYwfbt2+nR48eDB48mP3791sdrVwlJSUxe/ZsIiMjrY5SbiIiIkhPT7/2s2nTJqsjlblLly7RqVMnPD09Wbp0KQcOHGDatGlUq1bN6mhlLikp6brf98qVKwG4//77LU5Wtt544w1mzZrF22+/zcGDB3njjTf4y1/+wsyZM62OdmNmJRcbG2uOHDny2mObzWaGhISYU6ZMsTBV+QLMr7/+2uoYlsnIyDABc/369VZHKXfVqlUz33//fatjlJucnByzadOm5sqVK81u3bqZo0ePtjpSmZs0aZLZtm1bq2OUuxdeeMHs3Lmz1TGcwujRo83GjRubdrvd6ihlasCAAebw4cOvG/vVr35lDhkyxKJEP69Sn8EqKipix44d9OrV69qYm5sbvXr1YsuWLRYmk/KUlZUFQPXq1S1OUn5sNhuffvopeXl5xMfHWx2n3IwcOZIBAwZc9/+8Kzh8+DAhISGEh4czZMgQTp06ZXWkMrdw4UKio6O5//77qV27Nu3bt+e9996zOla5Kyoq4l//+hfDhw/HMAyr45Spjh07snr1ag4dOgTA7t272bRpE/369bM42Y05xc2ey8rFixex2WzUqVPnuvE6deqQkpJiUSopT3a7nTFjxtCpUydat25tdZwyt3fvXuLj47ly5QpVq1bl66+/plWrVlbHKheffvopycnJJCUlWR2lXMXFxfHhhx/SvHlz0tPTeeWVV+jSpQv79u3D39/f6nhl5tixY8yaNYtx48YxceJEkpKSGDVqFF5eXgwdOtTqeOXmm2++4fLlyzz66KNWRylzEyZMIDs7mxYtWuDu7o7NZmPy5MkMGTLE6mg3VKkLlsjIkSPZt2+fS8xJAWjevDm7du0iKyuLL774gqFDh7J+/fpKX7LS0tIYPXo0K1euxMfHx+o45ep///UeGRlJXFwcDRo0YMGCBYwYMcLCZGXLbrcTHR3Na6+9BkD79u3Zt28f7777rksVrA8++IB+/foREhJidZQyt2DBAj7++GPmz59PREQEu3btYsyYMYSEhDjl77xSF6yaNWvi7u7O+fPnrxs/f/48devWtSiVlJdnnnmGxYsXs2HDBurXr291nHLh5eVFkyZNAOjQoQNJSUnMmDGD2bNnW5ysbO3YsYOMjAyioqKujdlsNjZs2MDbb79NYWEh7u7uFiYsP0FBQTRr1owjR45YHaVMBQcH/+gfDi1btuTLL7+0KFH5O3nyJKtWreKrr76yOkq5eP7555kwYQIPPfQQAG3atOHkyZNMmTLFKQtWpZ6D5eXlRYcOHVi9evW1MbvdzurVq11qXoqrMU2TZ555hq+//po1a9bQqFEjqyNZxm63U1hYaHWMMtezZ0/27t3Lrl27rv1ER0czZMgQdu3a5TLlCiA3N5ejR48SHBxsdZQy1alTpx8tv3Lo0CEaNGhgUaLyN3fuXGrXrs2AAQOsjlIu8vPzcXO7vra4u7tjt9stSvTzKvUZLIBx48YxdOhQoqOjiY2N5a233iIvL49hw4ZZHa1M5ebmXvcv2OPHj7Nr1y6qV69OWFiYhcnK3siRI5k/fz7ffvst/v7+nDt3DoDAwEB8fX0tTld2XnzxRfr160dYWBg5OTnMnz+fdevWsXz5cqujlTl/f/8fzbHz8/OjRo0alX7u3XPPPcegQYNo0KABZ8+eZdKkSbi7u/Pwww9bHa1MjR07lo4dO/Laa6/xwAMPkJiYyJw5c5gzZ47V0cqF3W5n7ty5DB06FA+PSv9XOQCDBg1i8uTJhIWFERERwc6dO5k+fTrDhw+3OtqNWf01xvIwc+ZMMywszPTy8jJjY2PNrVu3Wh2pzK1du9YEfvQzdOhQq6OVuRsdN2DOnTvX6mhlavjw4WaDBg1MLy8vs1atWmbPnj3NFStWWB3LMq6yTMODDz5oBgcHm15eXma9evXMBx980Dxy5IjVscrFokWLzNatW5ve3t5mixYtzDlz5lgdqdwsX77cBMzU1FSro5Sb7Oxsc/To0WZYWJjp4+NjhoeHm7///e/NwsJCq6PdkGGaTroEqoiIiEgFVannYImIiIhYQQVLRERExMFUsEREREQcTAVLRERExMFUsEREREQcTAVLRERExMFUsEREREQcTAVLRERExMFUsEREREQcTAVLRERExMFUsEREREQcTAVLRERExMFUsEREREQcTAVLRERExMFUsEREREQcTAVLRERExMFUsEREREQc7P8Bv9qth+DukmgAAAAASUVORK5CYII=", "text/html": [ "\n", "
\n", "
\n", " Figure\n", "
\n", " \n", "
\n", " " ], "text/plain": [ "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(12, 5))\n", "ax.plot(x_3d[0, 0, :], label=r\"$x$\")\n", "ax.plot(shifted_back_lsqr[0, 0, :], \"--\", label=\"$L^T L x$\")\n", "ax.legend(loc=2)\n", "fig.tight_layout()" ] }, { "cell_type": "markdown", "metadata": { "id": "31eUxyhJrEbS" }, "source": [ "Pretty good, huh?\n", "\n", "Ok, but now let's try a harder one." ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "id": "nA6zJbm4rEbS" }, "outputs": [], "source": [ "dims = (20,)\n", "\n", "LOp1D = LinearShift(5.9, dims=dims)\n", "\n", "x_noise = np.random.uniform(low=1, high=10, size=dims) # Sample away from 0-mean\n", "\n", "shifted_noise = LOp1D @ x_noise\n", "\n", "shifted_back_noise_adj = LOp1D.T @ shifted_noise\n", "\n", "shifted_back_noise_lsqr = LOp1D / shifted_noise" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 17, "referenced_widgets": [ "9514404cd5354755a56f90ecf5e03d9a" ] }, "id": "xq1QrsJIrEbS", "outputId": "0856609f-87af-459d-9430-bc0513a8900b" }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "e1f81de0e83c4a2c911e3cba3c91b6f7", "version_major": 2, "version_minor": 0 }, "image/png": "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", "text/html": [ "\n", "
\n", "
\n", " Figure\n", "
\n", " \n", "
\n", " " ], "text/plain": [ "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(12, 5))\n", "ax.plot(x_noise, \"k\", label=r\"$x$\")\n", "ax.plot(shifted_back_noise_adj, label=r\"$L^T L x$\")\n", "ax.plot(shifted_back_noise_lsqr, \"--\", label=\"$L$ \\ $Lx$\")\n", "ax.legend(loc=2)\n", "fig.tight_layout()" ] }, { "cell_type": "markdown", "metadata": { "id": "WhnFbg2erEbS" }, "source": [ "Here we can see that\n", "1. Both the least-squares solution ($L\\backslash b$) and the adjoint ($L^T b$) sets unknown values to be zero (or very close to zero)\n", "2. The adjoint solution does not recover the exact values where we did not lose information. This does not happen to the least-squares solution.\n", " \n", "The first observation can be explained by the nature of adjoint operator, which pads elements with zero. The least-squares solution does not deviate substantially from this in the null space. Importantly, however, the least-squares solution recovers the signal exactly outside of the null space.\n", "\n", "In PyLops, when we call the division operator, we are actually calling an iterative least-squares method — the favored approach when you do not have matrices. There are many other solvers available, some of them showcased in the [previous presentation](https://github.com/PyLops/pylops_transform2022/blob/main/Decon.ipynb). Find more about them here: https://pylops.readthedocs.io/en/latest/tutorials/solvers.html\n", "\n", "\n", "For this small operator, we can compute the matrix and use a dense solver to obtain a solution. In large problems, we would not have this choice!" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "id": "ko4ykssNrEbT" }, "outputs": [], "source": [ "L1D = LOp1D.todense()\n", "\n", "shifted_back_noise_dense, *_ = np.linalg.lstsq(L1D, shifted_noise, rcond=None)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 17, "referenced_widgets": [ "501f7173ad144e3eaf871debccb3558e" ] }, "id": "y8QprXdJrEbT", "outputId": "9c61f5ee-c4c8-407d-dd20-220a74bd8f5a" }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "a85fa43d79714c22a102476a07845d95", "version_major": 2, "version_minor": 0 }, "image/png": "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8nNJkvj9739PamoqoaGhTJ06leLi4rMet7vvJ0rq7Dmw2Ww89NBDDB06lPDwcNLS0rj55pspLy/v9Jg9+XtS0tleBz/72c/OeDwzZsw463GD5XUAtPveoFKp+Nvf/tbhMQPtdeBL50yC9eGHH/Lggw+yYMECCgoKGD58ONOnT6e6urrd7X/44QduuOEGbr/9drZv386VV17JlVdeyZ49e3wcuWesWbOG+fPns3HjRpYvX47NZmPatGmYTKZO94uKiqKiosJ9Ky0t9VHE3jF48OBTHs/333/f4bbB9hoA2LJlyymPf/ny5QBcc801He4T6K8Bk8nE8OHDeemll9r9+dNPP83zzz/PK6+8wqZNmwgPD2f69OmYzeYOj9nd9xOldfYctLa2UlBQwOOPP05BQQGffvopRUVFXHHFFWc9bnf+npR2ttcBwIwZM055PO+//36nxwym1wFwymOvqKjgjTfeQKVSMXfu3E6PG0ivA5+SzhHjxo2T5s+f7/63w+GQ0tLSpIULF7a7/bXXXivNmjXrlPvGjx8v3XnnnV6N01eqq6slQFqzZk2H27z55ptSdHS074LysgULFkjDhw/v8vbB/hqQJEm6//77pZycHMnpdLb782B7DQDSZ5995v630+mUUlJSpL/97W/u+xobGyWDwSC9//77HR6nu+8n/uT056A9mzdvlgCptLS0w226+/fkT9p7Dm655RZpzpw53TpOsL8O5syZI02ZMqXTbQL5deBt58QIltVqZdu2bUydOtV9n1qtZurUqWzYsKHdfTZs2HDK9gDTp0/vcPtA09TUBEBcXFyn27W0tJCVlUVmZiZz5sxh7969vgjPa4qLi0lLS6Nfv37ceOONHD16tMNtg/01YLVaeffdd7nttts6XUQ92F4DJyspKaGysvKU33N0dDTjx4/v8Pfck/eTQNPU1IRKpSImJqbT7brz9xQIVq9eTVJSErm5udx9993U1dV1uG2wvw6qqqpYsmQJt99++1m3DbbXgaecEwlWbW0tDoeD5OTkU+5PTk6msrKy3X0qKyu7tX0gcTqdPPDAA0yePJkhQ4Z0uF1ubi5vvPEGixcv5t1338XpdDJp0iTKysp8GK3njB8/nrfeeoulS5eyaNEiSkpKOP/882lubm53+2B+DQB8/vnnNDY28rOf/azDbYLtNXA61++yO7/nnryfBBKz2cxDDz3EDTfc0OkCv939e/J3M2bM4J133mHlypX89a9/Zc2aNcycOROHw9Hu9sH+Onj77beJjIzk6quv7nS7YHsdeJJW6QAE35s/fz579uw56zz5xIkTmThxovvfkyZNIj8/n3/961/86U9/8naYHjdz5kz3/w8bNozx48eTlZXFRx991KVvacHm9ddfZ+bMmaSlpXW4TbC9BoTO2Ww2rr32WiRJYtGiRZ1uG2x/T9dff737/4cOHcqwYcPIyclh9erVXHLJJQpGpow33niDG2+88awXtQTb68CTzokRrISEBDQaDVVVVafcX1VVRUpKSrv7pKSkdGv7QHHvvffy1VdfsWrVKjIyMrq1r06nY+TIkRw8eNBL0flWTEwMAwcO7PDxBOtrAKC0tJQVK1bw85//vFv7BdtrwPW77M7vuSfvJ4HAlVyVlpayfPnyTkev2nO2v6dA069fPxISEjp8PMH6OgBYt24dRUVF3X5/gOB7HfTGOZFg6fV6Ro8ezcqVK933OZ1OVq5cecq385NNnDjxlO0Bli9f3uH2/k6SJO69914+++wzvvvuO/r27dvtYzgcDnbv3k1qaqoXIvS9lpYWDh061OHjCbbXwMnefPNNkpKSmDVrVrf2C7bXQN++fUlJSTnl92w0Gtm0aVOHv+eevJ/4O1dyVVxczIoVK4iPj+/2Mc729xRoysrKqKur6/DxBOPrwOX1119n9OjRDB8+vNv7BtvroFeUrrL3lQ8++EAyGAzSW2+9Je3bt0+64447pJiYGKmyslKSJEm66aabpIcffti9/fr16yWtViv9/e9/l/bv3y8tWLBA0ul00u7du5V6CL1y9913S9HR0dLq1auliooK9621tdW9zenPwR//+Efp22+/lQ4dOiRt27ZNuv7666WQkBBp7969SjyEXvv1r38trV69WiopKZHWr18vTZ06VUpISJCqq6slSQr+14CLw+GQ+vTpIz300ENn/CwYXwPNzc3S9u3bpe3bt0uA9Mwzz0jbt293XyH3l7/8RYqJiZEWL14s7dq1S5ozZ47Ut29fqa2tzX2MKVOmSC+88IL732d7P/E3nT0HVqtVuuKKK6SMjAxpx44dp7w/WCwW9zFOfw7O9vfkbzp7Dpqbm6Xf/OY30oYNG6SSkhJpxYoV0qhRo6QBAwZIZrPZfYxgfh24NDU1SWFhYdKiRYvaPUagvw586ZxJsCRJkl544QWpT58+kl6vl8aNGydt3LjR/bMLL7xQuuWWW07Z/qOPPpIGDhwo6fV6afDgwdKSJUt8HLHnAO3e3nzzTfc2pz8HDzzwgPv5Sk5Oli677DKpoKDA98F7yHXXXSelpqZKer1eSk9Pl6677jrp4MGD7p8H+2vA5dtvv5UAqaio6IyfBeNrYNWqVe2+9l2P0+l0So8//riUnJwsGQwG6ZJLLjnjucnKypIWLFhwyn2dvZ/4m86eg5KSkg7fH1atWuU+xunPwdn+nvxNZ89Ba2urNG3aNCkxMVHS6XRSVlaW9Itf/OKMRCmYXwcu//rXv6TQ0FCpsbGx3WME+uvAl1SSJEleHSITBEEQBEE4x5wTNViCIAiCIAi+JBIsQRAEQRAEDxMJliAIgiAIgoeJBEsQBEEQBMHDRIIlCIIgCILgYSLBEgRBEARB8DCRYAmCIAiCIHiYSLAEQRAEQRA8TCRYgiAIgiAIHiYSLEEQBEEQBA8TCZYgCIIgCIKHiQRLEARBEATBw0SCJQiCIAiC4GEiwRIEQRAEQfAwkWAJgiAIgiB4mEiwBEEQBEEQPEwkWIIg/P9GwSgYBaNgFFAZAAAffSyOeun9JQAAAABJRU5ErkJggg==", "text/html": [ "\n", "
\n", "
\n", " Figure\n", "
\n", " \n", "
\n", " " ], "text/plain": [ "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(12, 5))\n", "ax.plot(x_noise, \"k\", label=r\"$x$\")\n", "ax.plot(shifted_back_noise_adj, label=r\"$L^T L x$\")\n", "ax.plot(shifted_back_noise_lsqr, \"--\", label=\"$L$ \\ $Lx$\")\n", "ax.plot(shifted_back_noise_dense, \"-.\", label=\"$(L^T L)^{-1} x$\")\n", "ax.legend(loc=2)\n", "fig.tight_layout()" ] }, { "cell_type": "markdown", "metadata": { "id": "S2wej0hkrEbT" }, "source": [ "## Reshape/Ravel/Reshape/Ravel/...\n", "\n", "One of the biggest pain points for me when using PyLops often was the reshape/ravel combo that pollutes your code. In PyLops 2.0, we have introduced some changes to alleviate that. Some of these are on the user side:" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 35 }, "id": "wCR4F-uErEbT", "outputId": "3d7857f2-ad26-48ca-d0d0-e6d753a8126f" }, "outputs": [ { "data": { "text/plain": [ "(2, 3, 9)" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y = LOp @ x_3d\n", "y.shape" ] }, { "cell_type": "markdown", "metadata": { "id": "brO8vQ7jrEbT" }, "source": [ "In version 1.x, this code would error requiring always `x_3d.ravel()` as input, and always outputting a flat array. This is what we were doing in this tutorial so far.\n", "\n", "The magic 🪄 here is revamped `LinearOperator` class which understands model dimensions (`LOp.dims`) and data dimensions (`LOp.dimsd`). So whereas it still works with flattened arrays, it is now smart enough to reshape internally when needed.\n", "\n", "Moreover, it can also \"propagate\" dims/dimsd across multiple operators, as well as apply to matrices.\n", "Here are some examples:" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 162 }, "id": "MnY4-0wzrEbT", "outputId": "3d50352c-0634-4235-ae48-e1cb846ab2bb" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(2, 3, 9)\n" ] }, { "data": { "text/plain": [ "array([[[1. , 2. , 3. , 4. , 5. , 6. , 7. , 8. , 4.25],\n", " [1. , 2. , 3. , 4. , 5. , 6. , 7. , 8. , 4.25],\n", " [1. , 2. , 3. , 4. , 5. , 6. , 7. , 8. , 4.25]],\n", "\n", " [[1. , 2. , 3. , 4. , 5. , 6. , 7. , 8. , 4.25],\n", " [1. , 2. , 3. , 4. , 5. , 6. , 7. , 8. , 4.25],\n", " [1. , 2. , 3. , 4. , 5. , 6. , 7. , 8. , 4.25]]])" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y = LOp.T @ LOp @ x_3d\n", "print(y.shape)\n", "y" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 35 }, "id": "TUcm8QqprEbU", "outputId": "b8cefb5e-47db-4feb-a4a9-0ee3a8f506ab" }, "outputs": [ { "data": { "text/plain": [ "(2, 3, 9, 2)" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_3d = np.concatenate((x_3d[..., np.newaxis], x_3d[..., np.newaxis]), axis=-1)\n", "X_3d.shape" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 35 }, "id": "knss_ET9rEbU", "outputId": "9e8ed251-55c6-48c5-b5d5-3c2f832a90f2" }, "outputs": [ { "data": { "text/plain": [ "(2, 3, 9, 2)" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y = LOp.T @ LOp @ X_3d\n", "y.shape" ] }, { "cell_type": "markdown", "metadata": { "id": "KBik2lfFrEbU" }, "source": [ "The class needs no change, as long as it has a nontrivial `dims`/`dimsd`, it will work out of the box. We also included some goodies when implementing new operators. The following pattern is very common:\n", "\n", "```python\n", " def _matvec(self, x: npt.NDArray[np.float32]):\n", " x = x.reshape(self.dims)\n", " y = kernel_which_operates_on_reshaped(x)\n", " y = y.ravel()\n", "```\n", "\n", "In fact, the following pattern is even more common:\n", "\n", "```python\n", " def _matvec(self, x: npt.NDArray[np.float32]):\n", " x = x.reshape(self.dims)\n", " x = x.swapaxes(self.axis, -1)\n", " y = kernel_which_operates_on_reshaped(x)\n", " y.swapaxes(self.axis, -1)\n", " y = y.ravel()\n", "```\n", "\n", "The swapaxes is often used so that we can always assume that the axis on which to apply an operation is always the last one.\n", "This creates allows us to use the `ellipsis` operator in a smart way: we always operate on `x[..., i]`, instead of having to construct indexers.\n", "Previously, we used to do thing like this 🤢:\n", "\n", "```python\n", "i_ndim = [ slice(None) ] * len(self.dims)\n", "i_ndim[self.axis] = i\n", "x[i_ndim]\n", "```\n", "\n", "\n", "Swapaxes is also super cheap since it returns a view of the array." ] }, { "cell_type": "markdown", "metadata": { "id": "HVCT39d7rEbU" }, "source": [ "Using our new `reshaped` decorator, we can simplify our LinearShift functions from this:\n", "\n", "```python\n", " def _matvec(self, x: npt.NDArray[np.float32]):\n", " x = x.reshape(self.dims)\n", " y = shiftnd_linear(x, shift=self.shift, axis=self.axis)\n", " y = y.ravel()\n", " return y\n", "```\n", "\n", "to this:\n", " \n", "```python\n", " from pylops.utils.decorators import reshaped\n", " ⋮\n", " @reshaped\n", " def _matvec(self, x: npt.NDArray[np.float32]):\n", " y = shiftnd_linear(x, shift=self.shift, axis=self.axis)\n", " return y\n", "```\n", "\n", "or even this:\n", "\n", "```python\n", " from pylops.utils.decorators import reshaped\n", " ⋮\n", " @reshaped(swapaxis=True)\n", " def _matvec(self, x: npt.NDArray[np.float32]):\n", " y = shiftnd_linear(x, shift=self.shift, axis=-1)\n", " return y\n", "```\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "id": "NBfkjM8ZrEbU" }, "source": [ "To finish this tutorial, let's see the full standalone `LinearShift` operator with some extra goodies." ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "id": "N1xFByKMrEbU" }, "outputs": [], "source": [ "from math import floor\n", "from pylops.utils.decorators import reshaped\n", "\n", "try:\n", " from numba import jit\n", "\n", " NUMBA_AVAILABLE = True\n", "except ImportError:\n", " NUMBA_AVAILABLE = False\n", "\n", "class LinearShift(pylops.LinearOperator):\n", " \"\"\"LinearShift shifts an N-dimensional array by a single real value along a given axis.\n", "\n", " Since we are responsible coders, this is the entirety of our very long\n", " and detailed documentation for this class. At least we're annotating...\n", " \"\"\"\n", "\n", " def __init__(\n", " self,\n", " shift: float,\n", " dims: Tuple[int, ...],\n", " axis: int = -1,\n", " dtype: npt.DTypeLike = np.float32,\n", " name: str = \"L\",\n", " engine: str = \"numba\", # Use numpy for GPU\n", " ):\n", " self.shift = shift\n", " self.axis = axis\n", "\n", " if engine == \"numba\" and not NUMBA_AVAILABLE:\n", " engine = \"numpy\"\n", " logger.warning(\"Numba engine not available.\")\n", " self.engine = engine\n", " logger.info(f\"Using {self.engine} engine.\")\n", "\n", " super().__init__(dtype=dtype, dims=dims, dimsd=dims, name=name)\n", "\n", " self._register_shiftnd_linear()\n", "\n", " def _register_shiftnd_linear(self):\n", " \"\"\"\n", " Register the correct method depending on whether Numba\n", " is available or not.\n", " \"\"\"\n", " # CuPy- and Numba-accepted functions: relies only on ndarray properties;\n", " # remove dependency on `np`.\n", " #\n", " # An alternative design choice is to register both a CPU and a GPU method,\n", " # and, inside of _(r)matvec, use cupy.get_array_module(x) to decide which\n", " # method to call.\n", "\n", " def shiftnd(x: npt.NDArray, shift: int):\n", " out = x * 0.0 # replaces np.zeros_like\n", " if abs(shift) > x.shape[-1]:\n", " return out\n", " if shift == 0:\n", " out[:] = x[:]\n", " elif shift > 0:\n", " out[..., shift:] = x[..., :-shift]\n", " else:\n", " out[..., :shift] = x[..., -shift:]\n", " return out\n", "\n", " def shiftnd_linear(x: npt.NDArray, shift: float):\n", " shift_floor = int(floor(shift))\n", " w = shift - shift_floor\n", " return (1 - w) * shiftnd(x, shift_floor) + w * shiftnd(x, shift_floor + 1)\n", "\n", " if self.engine == \"numba\":\n", " numba_opts = dict(nopython=True, fastmath=True, nogil=True, parallel=True)\n", " shiftnd = jit(**numba_opts)(shiftnd) # Must jit all functions used by `shiftnd_linear`\n", " shiftnd_linear = jit(**numba_opts)(shiftnd_linear)\n", " self._shiftnd_linear = shiftnd_linear\n", "\n", " @reshaped(swapaxis=True)\n", " def _matvec(self, x: npt.NDArray):\n", " return self._shiftnd_linear(x, shift=self.shift)\n", "\n", " @reshaped(swapaxis=True)\n", " def _rmatvec(self, y: npt.NDArray):\n", " return self._shiftnd_linear(y, shift=-self.shift)" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 162 }, "id": "ahXXQeOb5A36", "outputId": "bb4c34b6-052b-44fc-cb10-7d55d479344c" }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "INFO: Using numba engine.\n" ] }, { "data": { "text/plain": [ "array([[[1. , 2. , 3. , 4. , 5. , 6. , 7. , 8. , 4.25],\n", " [1. , 2. , 3. , 4. , 5. , 6. , 7. , 8. , 4.25],\n", " [1. , 2. , 3. , 4. , 5. , 6. , 7. , 8. , 4.25]],\n", "\n", " [[1. , 2. , 3. , 4. , 5. , 6. , 7. , 8. , 4.25],\n", " [1. , 2. , 3. , 4. , 5. , 6. , 7. , 8. , 4.25],\n", " [1. , 2. , 3. , 4. , 5. , 6. , 7. , 8. , 4.25]]])" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Taking it for a spin: CPU\n", "LOp = LinearShift(0.5, dims=x_3d.shape)\n", "LOp.T @ LOp @ x_3d" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 162 }, "id": "i3bqICJz5Bvn", "outputId": "e8407408-2022-43de-d4ce-6364e25bb79f" }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "INFO: Using numpy engine.\n" ] }, { "data": { "text/plain": [ "array([[[1. , 2. , 3. , 4. , 5. , 6. , 7. , 8. , 4.25],\n", " [1. , 2. , 3. , 4. , 5. , 6. , 7. , 8. , 4.25],\n", " [1. , 2. , 3. , 4. , 5. , 6. , 7. , 8. , 4.25]],\n", "\n", " [[1. , 2. , 3. , 4. , 5. , 6. , 7. , 8. , 4.25],\n", " [1. , 2. , 3. , 4. , 5. , 6. , 7. , 8. , 4.25],\n", " [1. , 2. , 3. , 4. , 5. , 6. , 7. , 8. , 4.25]]])" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Taking it for a spin: GPU\n", "LOp = LinearShift(0.5, dims=x_3d.shape, engine=\"numpy\")\n", "x_3d_gpu = cp.asarray(x_3d) # move to GPU\n", "LOp.T @ LOp @ x_3d_gpu" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "id": "m0lPeGo7zqJx" }, "outputs": [], "source": [] } ], "metadata": { "@webio": { "lastCommId": null, "lastKernelId": null }, "accelerator": "GPU", "colab": { "collapsed_sections": [], "name": "PyLops_v2.ipynb", "provenance": [] }, "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.8.10" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": { "height": "calc(100% - 180px)", "left": "10px", "top": "150px", "width": "220.86956787109375px" }, "toc_section_display": true, "toc_window_display": true }, "widgets": { "application/vnd.jupyter.widget-state+json": { "17fe01e151c14d2cb7a7fb6c46d23a32": { "model_module": "jupyter-matplotlib", "model_module_version": "1.0.0", "model_name": "MPLCanvasModel", "state": { "_cursor": "default", "_data_url": "data:image/png;base64,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", "_dom_classes": [], "_figure_label": "Figure", "_image_mode": "full", "_message": "", "_model_module": "jupyter-matplotlib", "_model_module_version": "1.0.0", "_model_name": "MPLCanvasModel", "_rubberband_height": 0, "_rubberband_width": 0, "_rubberband_x": 0, "_rubberband_y": 0, "_size": [ 432, 216 ], "_view_count": null, "_view_module": "jupyter-matplotlib", "_view_module_version": "1.0.0", "_view_name": "MPLCanvasView", "capture_scroll": false, "footer_visible": true, "header_visible": true, "layout": "IPY_MODEL_1595011ffaf84022a93e25e0b9980891", "pan_zoom_throttle": 33, "resizable": true, "toolbar": "IPY_MODEL_62747e44110742e5bc9d496554401bdc", "toolbar_position": "left", "toolbar_visible": "fade-in-fade-out" } }, "501f7173ad144e3eaf871debccb3558e": { "model_module": "jupyter-matplotlib", "model_module_version": "1.0.0", "model_name": "MPLCanvasModel", "state": { "_cursor": "default", "_data_url": "data:image/png;base64,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", "_dom_classes": [], "_figure_label": "Figure", "_image_mode": "full", "_message": "", "_model_module": "jupyter-matplotlib", "_model_module_version": "1.0.0", "_model_name": "MPLCanvasModel", "_rubberband_height": 0, "_rubberband_width": 0, "_rubberband_x": 0, "_rubberband_y": 0, "_size": [ 432, 216 ], "_view_count": null, "_view_module": "jupyter-matplotlib", "_view_module_version": "1.0.0", "_view_name": "MPLCanvasView", "capture_scroll": false, "footer_visible": true, "header_visible": true, "layout": "IPY_MODEL_73020f75778149d7b8ca0c04a49bfc19", "pan_zoom_throttle": 33, "resizable": true, "toolbar": "IPY_MODEL_9f44c7540ba4473095ed4423ea622524", "toolbar_position": "left", "toolbar_visible": "fade-in-fade-out" } }, "5a0f1c5b6bb04e688b01e714ff9a4b79": { "model_module": "jupyter-matplotlib", "model_module_version": "1.0.0", "model_name": "MPLCanvasModel", "state": { "_cursor": "default", "_data_url": "data:image/png;base64,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", "_dom_classes": [], "_figure_label": "Figure", "_image_mode": "full", "_message": "", "_model_module": "jupyter-matplotlib", "_model_module_version": "1.0.0", "_model_name": "MPLCanvasModel", "_rubberband_height": 0, "_rubberband_width": 0, "_rubberband_x": 0, "_rubberband_y": 0, "_size": [ 432, 216 ], "_view_count": null, "_view_module": "jupyter-matplotlib", "_view_module_version": "1.0.0", "_view_name": "MPLCanvasView", "capture_scroll": false, "footer_visible": true, "header_visible": true, "layout": "IPY_MODEL_653cb935f9024f279a4607f7cec22dfb", "pan_zoom_throttle": 33, "resizable": true, "toolbar": "IPY_MODEL_35d15a18441e42d4a434ddf966ff6c0c", "toolbar_position": "left", "toolbar_visible": "fade-in-fade-out" } }, "9514404cd5354755a56f90ecf5e03d9a": { "model_module": "jupyter-matplotlib", "model_module_version": "1.0.0", "model_name": "MPLCanvasModel", "state": { "_cursor": "default", "_data_url": "data:image/png;base64,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", "_dom_classes": [], "_figure_label": "Figure", "_image_mode": "full", "_message": "", "_model_module": "jupyter-matplotlib", "_model_module_version": "1.0.0", "_model_name": "MPLCanvasModel", "_rubberband_height": 0, "_rubberband_width": 0, "_rubberband_x": 0, "_rubberband_y": 0, "_size": [ 432, 216 ], "_view_count": null, "_view_module": "jupyter-matplotlib", "_view_module_version": "1.0.0", "_view_name": "MPLCanvasView", "capture_scroll": false, "footer_visible": true, "header_visible": true, "layout": "IPY_MODEL_06e54a606e1345719938e0052c033d97", "pan_zoom_throttle": 33, "resizable": true, "toolbar": "IPY_MODEL_0dbcba818cf24e9398c22a2db12cfa65", "toolbar_position": "left", "toolbar_visible": "fade-in-fade-out" } } } } }, "nbformat": 4, "nbformat_minor": 1 }