{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "### Julia Tutorial: Array Slicing\n", "Array slicing in Julia differs a bit from Matlab. \n", "In Matlab, everything is an array; even a scalar is a 1x1 array. \n", "In Julia, there are distinct data types for scalars, vectors, AdjointVectors and Arrays. \n", "This notebook illustrates how those differences affect array slicing. \n", "For rationale, see the \"Dimension sum slices\" section under this blog: \n", "https://julialang.org/blog/2016/10/julia-0.5-highlights \n", "Jeff Fessler, University of Michigan \n", "2017-07-24, original \n", "2020-08-05, Julia 1.5.0 \n", "2021-08-23, Julia 1.6.2" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "A = [10*m+n for m=1:3, n=1:4] # start with a simple \"self documenting\" 2D array" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "A[1:2,:] # slicing multiple rows or columns works the same as in Matlab" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "A[2,:] # however, slicing a single row returns a 1D vector, not a 1×4 array!" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "A[[2],:] # this unusual version of slicing a single row returns a 1×4 array!" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "A[:,3] # slicing a single column yields a vector, NOT a 3×1 array" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "A[[2],:] * A[[3],:]' # 1×4 array times a 4×1 array yields a 1×1 array!" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "A[:,[3]] # this way gives a 3×1 array, not a vector" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "A[:,3]' * A[:,2] # dot product between Adjoint Vector and vector yields a scalar" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "A[:,[3]]' * A[:,[2]] # 1×3 array times a 3×1 array yields a 1×1 array!" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "A[2,:] * A[3,:]' # this would be a dot product in Matlab\n", " # but it is an outer product in Julia." ] } ], "metadata": { "jupytext": { "encoding": "# -*- coding: utf-8 -*-" }, "kernelspec": { "display_name": "Julia 1.6.2", "language": "julia", "name": "julia-1.6" } }, "nbformat": 4, "nbformat_minor": 4 }