summaryrefslogtreecommitdiff
path: root/numpy/doc/numpybook/numpybook.lyx
diff options
context:
space:
mode:
Diffstat (limited to 'numpy/doc/numpybook/numpybook.lyx')
-rw-r--r--numpy/doc/numpybook/numpybook.lyx27836
1 files changed, 0 insertions, 27836 deletions
diff --git a/numpy/doc/numpybook/numpybook.lyx b/numpy/doc/numpybook/numpybook.lyx
deleted file mode 100644
index 16ee19d90..000000000
--- a/numpy/doc/numpybook/numpybook.lyx
+++ /dev/null
@@ -1,27836 +0,0 @@
-#LyX 1.5.1 created this file. For more info see http://www.lyx.org/
-\lyxformat 276
-\begin_document
-\begin_header
-\textclass mybook
-\begin_preamble
-
-
-
-\usepackage{array}
-
-% This gives us a better font in URL links (otherwise the default
-% MonoSpace font is bitmapped, and it looks horrible in PDF)
-\usepackage{courier}
-
-\usepackage{fullpage}
-
-\usepackage{color} % so we can use red for the fixme warnings
-
-% The hyperref package gives us a pdf with properly built
-% internal navigation ('pdf bookmarks' for the table of contents,
-% internal cross-reference links, web links for URLs, etc.)
-
-% A few colors to replace the defaults for certain link types
-\definecolor{darkorange}{rgb}{.71,0.21,0.01}
-\definecolor{darkgreen}{rgb}{.12,.54,.11}
-
-\usepackage[
- %pdftex, % needed for pdflatex
- breaklinks=true, % so long urls are correctly broken across lines
- colorlinks=true,
- urlcolor=blue,
- linkcolor=darkorange,
- citecolor=darkgreen,
- ]{hyperref}
-
-% This helps prevent overly long lines that stretch beyond the margins
-\sloppy
-
-% Define a \fixme command to mark visually things needing fixing in the draft.
-% For final printing or to simply disable these bright warnings, simply
-% uncomment the \renewcommand redefinition below
-
-\newcommand{\fixme}[1] {
-\textcolor{red}{
-{\fbox{ {\bf FIX}
-\ensuremath{\blacktriangleright \blacktriangleright \blacktriangleright}}
-{\bf #1}
-\fbox{\ensuremath{ \blacktriangleleft \blacktriangleleft \blacktriangleleft }
-} } }
-}
-% Uncomment the next line to make the \fixme command be a no-op
-%\renewcommand{\fixme}[1]{}
-
-%%% If you also want to use the listings package for nicely formatted
-%%% Python source code, this configuration produces good on-paper and
-%%% on-screen results:
-
-\definecolor{orange}{cmyk}{0,0.4,0.8,0.2}
-% Use and configure listings package for nicely formatted code
-\usepackage{listings}
-\lstset{
- language=Python,
- basicstyle=\small\ttfamily,
- commentstyle=\ttfamily\color{blue},
- stringstyle=\ttfamily\color{orange},
- showstringspaces=false,
- breaklines=true,
- postbreak = \space\dots
-}
-\end_preamble
-\language english
-\inputencoding auto
-\font_roman default
-\font_sans default
-\font_typewriter default
-\font_default_family default
-\font_sc false
-\font_osf false
-\font_sf_scale 100
-\font_tt_scale 100
-\graphics default
-\paperfontsize 10
-\spacing onehalf
-\papersize custom
-\use_geometry true
-\use_amsmath 2
-\use_esint 0
-\cite_engine basic
-\use_bibtopic false
-\paperorientation portrait
-\paperwidth 7in
-\paperheight 9in
-\leftmargin 1in
-\topmargin 1in
-\rightmargin 1in
-\bottommargin 1in
-\secnumdepth 3
-\tocdepth 3
-\paragraph_separation indent
-\defskip medskip
-\quotes_language english
-\papercolumns 1
-\papersides 1
-\paperpagestyle headings
-\tracking_changes false
-\output_changes false
-\author ""
-\author ""
-\end_header
-
-\begin_body
-
-\begin_layout Standard
-\begin_inset VSpace 2in*
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\align center
-
-\family sans
-\series bold
-\size giant
-Guide to NumPy
-\end_layout
-
-\begin_layout Standard
-\align center
-
-\family sans
-\size larger
-Travis E.
- Oliphant, PhD
-\newline
-August 21, 2008
-\end_layout
-
-\begin_layout Standard
-\begin_inset VSpace vfill
-\end_inset
-
-This book was released from a restricted distribution using a Market-Determined,
- Temporary, Distribution-Restriction (MDTDR) system (see http://www.trelgol.com)
- on August 21, 2008.
- It is now released to the public domain and can be used as source material
- for other works.
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand tableofcontents
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset FloatList table
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Part
-NumPy from Python
-\end_layout
-
-\begin_layout Chapter
-Origins of NumPy
-\end_layout
-
-\begin_layout Quotation
-A complex system that works is invariably found to have evolved from a simple
- system that worked
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-John Gall
-\end_layout
-
-\begin_layout Quotation
-Copy from one, it's plagiarism; copy from two, it's research.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Wilson Mizner
-\end_layout
-
-\begin_layout Standard
-NumPy builds on (and is a successor to) the successful Numeric array object.
- Its goal is to create the corner-stone for a useful environment for scientific
- computing.
- In order to better understand the people surrounding NumPy and (its library-pac
-kage) SciPy, I will explain a little about how SciPy and (current) NumPy
- originated.
- In 1998, as a graduate student studying biomedical imaging at the Mayo
- Clinic in Rochester, MN, I came across Python and its numerical extension
- (Numeric) while I was looking for ways to analyze large data sets for Magnetic
- Resonance Imaging and Ultrasound using a high-level language.
- I quickly fell in love with Python programming which is a remarkable statement
- to make about a programming language.
- If I had not seen others with the same view, I might have seriously doubted
- my sanity.
- I became rather involved in the Numeric Python community, adding the C-API
- chapter to the Numeric documentation (for which Paul Dubois graciously
- made me a co-author).
-
-\end_layout
-
-\begin_layout Standard
-As I progressed with my thesis work, programming in Python was so enjoyable
- that I felt inhibited when I worked with other programming frameworks.
- As a result, when a task I needed to perform was not available in the core
- language, or in the Numeric extension, I looked around and found C or Fortran
- code that performed the needed task, wrapped it into Python (either by
- hand or using SWIG), and used the new functionality in my programs.
-
-\end_layout
-
-\begin_layout Standard
-Along the way, I learned a great deal about the underlying structure of
- Numeric and grew to admire it's simple but elegant structures that grew
- out of the mechanism by which Python allows itself to be extended.
-
-\end_layout
-
-\begin_layout Note
-Numeric was originally written in 1995 based off of an earlier Matrix Object
- design by Jim Fulton which was released in 1994.
- Most of the code was written by Jim Hugunin while he was a graduate student
- at MIT.
- He received help from many people including Jim Fulton, David Ascher, Paul
- Dubois, and Konrad Hinsen.
- These individuals and many others added comments, criticisms, and code
- which helped the Numeric extension reach stability.
- Jim Hugunin did not stay long as an active member of the community ---
- moving on to write Jython and, later, Iron Python.
-\end_layout
-
-\begin_layout Standard
-By operating in this need-it-make-it fashion I ended up with a substantial
- library of extension modules that helped Python + Numeric become easier
- to use in a scientific setting.
- These early modules included raw input-output functions, a special function
- library, an integration library, an ordinary differential equation solver,
- some least-squares optimizers, and sparse matrix solvers.
- While I was doing this laborious work, Pearu Peterson noticed that a lot
- of the routines I was wrapping were written in Fortran, and there was no
- simplified wrapping mechanism for Fortran subroutines (like SWIG for C).
- He began the task of writing f2py which made it possible to easily wrap
- Fortran programs into Python.
- I helped him a little bit, mostly with testing and contributing early function-
-call-back code, but he put forth the brunt of the work.
- His result was simply amazing to me.
- I've always been impressed with f2py, especially because I knew how much
- effort writing and maintaining extension modules could be.
- Anybody serious about scientific computing with Python will appreciate
- that f2py is distributed along with NumPy.
-\end_layout
-
-\begin_layout Standard
-When I finished my Ph.D.
- in 2001, Eric Jones (who had recently completed his Ph.D.
- at Duke) contacted me because he had a collection of Python modules he
- had developed as part of his thesis work as well.
- He wanted to combine his modules with mine into one super package.
- Together with Pearu Peterson we joined our efforts, and SciPy was born
- in 2001.
- Since then, many people have contributed module code to SciPy including
- Ed Schofield, Robert Cimrman, David M.
- Cooke, Charles (Chuck) Harris, Prabhu Ramachandran, Gary Strangman, Jean-Sebast
-ien Roy, and Fernando Perez.
- Others such as Travis Vaught, David Morrill, Jeff Whitaker, and Louis Luangkeso
-rn have contributed testing and build support.
-
-\end_layout
-
-\begin_layout Standard
-At the start of 2005, SciPy was at release 0.3 and relatively stable for
- an early version number.
- Part of the reason it was difficult to stabilize SciPy was that the array
- object upon which SciPy builds was undergoing a bit of an upheaval.
- At about the same time as SciPy was being built, some Numeric users were
- hitting up against the limited capabilities of Numeric.
- In particular, the ability to deal with memory mapped files (and associated
- alignment and swapping issues), record arrays, and altered error checking
- modes were important but limited or non-existent in Numeric.
- As a result, numarray was created by Perry Greenfield, Todd Miller, and
- Rick White at the Space Science Telescope Institute as a replacement for
- Numeric.
- Numarray used a very different implementation scheme as a mix of Python
- classes and C code (which led to slow downs in certain common uses).
- While improving some capabilities, it was slow to pick up on the more advanced
- features of Numeric's universal functions (ufuncs) --- never re-creating
- the C-API that SciPy depended on.
- This made it difficult for SciPy to
-\begin_inset Quotes eld
-\end_inset
-
-convert
-\begin_inset Quotes erd
-\end_inset
-
- to numarray.
-
-\end_layout
-
-\begin_layout Standard
-Many newcomers to scientific computing with Python were told that numarray
- was the future and started developing for it.
- Very useful tools were developed that could not be used with Numeric (because
- of numarray's change in C-API), and therefore could not be used easily
- in SciPy.
- This state of affairs was very discouraging for me personally as it left
- the community fragmented.
- Some developed for numarray, others developed as part of SciPy.
- A few people even rejected adopting Python for scientific computing entirely
- because of the split.
- In addition, I estimate that quite a few Python users simply stayed away
- from both SciPy and numarray, leaving the community smaller than it could
- have been given the number of people that use Python for science and engineerin
-g purposes.
-
-\end_layout
-
-\begin_layout Standard
-It should be recognized that the split was not intentional, but simply an
- outgrowth of the different and exacting demands of scientific computing
- users.
- My describing these events should not be construed as assigning blame to
- anyone.
- I very much admire and appreciate everyone I've met who is involved with
- scientific computing and Python.
- Using a stretched biological metaphor, it is only through the process of
- dividing and merging that better results are born.
- I think this concept applies to NumPy.
-\end_layout
-
-\begin_layout Standard
-In early 2005, I decided to begin an effort to help bring the diverging
- community together under a common framework if it were possible.
- I first looked at numarray to see what could be done to add the missing
- features to make SciPy work with it as a core array object.
- After a couple of days of studying numarray, I was not enthusiastic about
- this approach.
- My familiarity with the Numeric code base no doubt biased my opinion, but
- it seemed to me that the features of Numarray could be added back to Numeric
- with a few fundamental changes to the core object.
- This would make the transition of SciPy to a more enhanced array object
- much easier in my mind.
-
-\end_layout
-
-\begin_layout Standard
-Therefore, I began to construct this hybrid array object complete with an
- enhanced set of universal (broadcasting) functions that could deal with
- it.
- Along the way, quite a few new features and significant enhancements were
- added to the array object and its surrounding infrastructure.
- This book describes the result of that year-and-a-half-long effort which
- culminated with the release of NumPy 0.9.2 in early 2006 and NumPy 1.0 in
- late 2006.
- I first named the new package, SciPy Core, and used the scipy namespace.
- However, after a few months of testing under that name, it became clear
- that a separate namespace was needed for the new package.
- As a result, a rapid search for a new name resulted in actually coming
- back to the NumPy name which was the unofficial name of Numerical Python
- but never the actual namespace.
- Because the new package builds on the code-base of and is a successor to
- Numeric, I think the NumPy name is fitting and hopefully not too confusing
- to new users.
-\end_layout
-
-\begin_layout Standard
-This book only briefly outlines some of the infrastructure that surrounds
- the basic objects in NumPy to provide the additional functionality contained
- in the older Numeric package (
-\emph on
-i.e.
-
-\emph default
- LinearAlgebra, RandomArray, FFT).
- This infrastructure in NumPy includes basic linear algebra routines, Fourier
- transform capabilities, and random number generators.
- In addition, the f2py module is described in its own documentation, and
- so is only briefly mentioned in the second part of the book.
- There are also extensions to the standard Python distutils and testing
- frameworks included with NumPy that are useful in constructing your own
- packages built on top of NumPy.
- The central purpose of this book, however, is to describe and document
- the basic NumPy system that is available under the numpy namespace.
-\end_layout
-
-\begin_layout Note
-The numpy namespace includes all names under the numpy.core and numpy.lib
- namespaces as well.
- Thus,
-\family typewriter
-import numpy
-\family default
- will also import the names from numpy.core and numpy.lib.
- This is the recommended way to use numpy.
-\end_layout
-
-\begin_layout Standard
-The following table gives a brief outline of the sub-packages contained
- in numpy package.
-\end_layout
-
-\begin_layout Standard
-\align center
-\begin_inset Tabular
-<lyxtabular version="3" rows="9" columns="3">
-<features>
-<column alignment="center" valignment="top" leftline="true" width="1in">
-<column alignment="center" valignment="top" leftline="true" width="2in">
-<column alignment="center" valignment="top" leftline="true" rightline="true" width="2in">
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Package
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Purpose
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Comments
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-core
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-basic objects
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-all names exported to numpy
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-lib
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-additional utilities
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-all names exported to numpy
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-linalg
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-basic linear algebra
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-old LinearAlgebra from Numeric
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-fft
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-discrete Fourier transforms
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-old FFT from Numeric
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-random
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-random number generators
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-old RandomArray from Numeric
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-distutils
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-enhanced build and distribution
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-improvements built on standard distutils
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-testing
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-unit-testing
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-utility functions useful for testing
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-f2py
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-automatic wrapping of Fortran code
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-a useful utility needed by SciPy
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Chapter
-Object Essentials
-\end_layout
-
-\begin_layout Quotation
-Our programs last longer if we manage to build simple abstractions for ourselves...
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Ron Jeffries
-\end_layout
-
-\begin_layout Quotation
-I will tell you the truth as soon as I figure it out.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Wayne Birmingham
-\end_layout
-
-\begin_layout Standard
-NumPy provides two fundamental objects: an N-dimensional array object (
-\family typewriter
-ndarray
-\family default
-) and a universal function object (
-\family typewriter
-ufunc
-\family default
-).
- In addition, there are other objects that build on top of these which you
- may find useful in your work, and these will be discussed later.
- The current chapter will provide background information on just the
-\family typewriter
-ndarray
-\family default
- and the
-\family typewriter
-ufunc
-\family default
- that will be important for understanding the attributes and methods to
- be discussed later.
-
-\end_layout
-
-\begin_layout Standard
-An N-dimensional array is a homogeneous collection of
-\begin_inset Quotes eld
-\end_inset
-
-items
-\begin_inset Quotes erd
-\end_inset
-
- indexed using
-\begin_inset Formula $N$
-\end_inset
-
- integers.
- There are two essential pieces of information that define an
-\begin_inset Formula $N$
-\end_inset
-
--dimensional array: 1) the shape of the array, and 2) the kind of item the
- array is composed of.
- The shape of the array is a tuple of
-\begin_inset Formula $N$
-\end_inset
-
- integers (one for each dimension) that provides information on how far
- the index can vary along that dimension.
- The other important information describing an array is the kind of item
- the array is composed of.
- Because every
-\family typewriter
-ndarray
-\family default
- is a homogeneous collection of exactly the same data-type, every item takes
- up the same size block of memory, and each block of memory in the array
- is interpreted in exactly the same way
-\begin_inset Foot
-status open
-
-\begin_layout Standard
-By using OBJECT arrays, one can effectively have heterogeneous arrays, but
- the system still sees each element of the array as exactly the same thing
- (a reference to a Python object).
-\end_layout
-
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Tip
-All arrays in NumPy are indexed starting at 0 and ending at M-1 following
- the Python convention.
-\end_layout
-
-\begin_layout Standard
-For example, consider the following piece of code:
-\end_layout
-
-\begin_layout MyCode
->>> a = array([[1,2,3],[4,5,6]])
-\newline
->>> a.shape
-\newline
-(2, 3)
-\newline
->>> a.dtype
-\newline
-dtype('int32')
-\end_layout
-
-\begin_layout Note
-for all code in this book it is assumed that you have first entered
-\family typewriter
-from numpy import *
-\family default
-.
- In addition, any previously defined arrays are still defined for subsequent
- examples.
-\end_layout
-
-\begin_layout Standard
-This code defines an array of size
-\begin_inset Formula $2\times3$
-\end_inset
-
- composed of 4-byte (little-endian) integer elements (on my 32-bit platform).
- We can index into this two-dimensional array using two integers: the first
- integer running from 0 to 1 inclusive and the second from 0 to 2 inclusive.
- For example, index
-\begin_inset Formula $\left(1,1\right)$
-\end_inset
-
- selects the element with value 5:
-\end_layout
-
-\begin_layout MyCode
->>> a[1,1]
-\newline
-5
-\end_layout
-
-\begin_layout Standard
-All code shown in the shaded-boxes in this book has been (automatically)
- executed on a particular version of NumPy.
- The output of the code shown below shows which version of NumPy was used
- to create all of the output in your copy of this book.
-\end_layout
-
-\begin_layout MyCode
->>> import numpy; print numpy.__version__
-\newline
-1.0.2.dev3478
-\end_layout
-
-\begin_layout Section
-Data-Type Descriptors
-\end_layout
-
-\begin_layout Standard
-In NumPy, an ndarray is an
-\begin_inset Formula $N$
-\end_inset
-
--dimensional array of items where each item takes up a fixed number of bytes.
- Typically, this fixed number of bytes represents a number (
-\emph on
-e.g.
-
-\emph default
- integer or floating-point).
- However, this fixed number of bytes could also represent an arbitrary record
- made up of any collection of other data types.
- NumPy achieves this flexibility through the use of a data-type (dtype)
- object.
- Every array has an associated dtype object which describes the layout of
- the array data.
- Every dtype
-\begin_inset LatexCommand index
-name "dtype"
-
-\end_inset
-
- object, in turn, has an associated Python type-object that determines exactly
- what type of Python object is returned when an element of the array is
- accessed.
- The dtype objects are flexible enough to contain references to arrays of
- other dtype objects and, therefore, can be used to define nested records.
- This advanced functionality will be described in better detail later as
- it is mainly useful for the recarray (record array) subclass that will
- also be defined later.
- However, all ndarrays can enjoy the flexibility provided by the dtype objects.
- Figure
-\begin_inset LatexCommand ref
-reference "cap:Conceptual-diagram-showing"
-
-\end_inset
-
- provides a conceptual diagram showing the relationship between the ndarray,
- its associated data-type object, and an array-scalar that is returned when
- a single-element of the array is accessed.
- Note that the data-type points to the type-object of the array scalar
-\begin_inset LatexCommand index
-name "array scalars"
-
-\end_inset
-
-.
- An array scalar is returned using the type-object and a particular element
- of the ndarray.
-\end_layout
-
-\begin_layout Standard
-\begin_inset Float figure
-wide false
-sideways false
-status open
-
-\begin_layout Standard
-\align center
-\begin_inset Graphics
- filename Figures/threefundamental.eps
- width 90text%
- keepAspectRatio
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset Caption
-
-\begin_layout Standard
-\begin_inset LatexCommand label
-name "cap:Conceptual-diagram-showing"
-
-\end_inset
-
-Conceptual diagram showing the relationship between the three fundamental
- objects used to describe the data in an array: 1) the ndarray itself, 2)
- the data-type object that describes the layout of a single fixed-size element
- of the array, 3) the array-scalar Python object that is returned when a
- single element of the array is accessed.
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-Every dtype object is based on one of 21 built-in dtype objects.
- These built-in objects allow numeric operations on a wide-variety of integer,
- floating-point, and complex data types.
- Associated with each data-type is a Python type object whose instances
- are array scalars.
- This type-object can be obtained using the
-\family typewriter
-type
-\family default
- attribute of the dtype object.
- Python typically defines only one data-type of a particular data class
- (one integer type, one floating-point type, etc.).
- This can be convenient for some applications that don't need to be concerned
- with all the ways data can be represented in a computer.
- For scientific applications, however, this is not always true.
- As a result, in NumPy, their are 21 different fundamental Python data-type-desc
-riptor objects built-in.
- These descriptors are mostly based on the types available in the C language
- that CPython is written in.
- However, there are a few types that are extremely flexible, such as
-\family typewriter
-str_
-\family default
-,
-\family typewriter
-unicode_
-\family default
-, and
-\family typewriter
-void
-\family default
-.
-\end_layout
-
-\begin_layout Standard
-The fundamental data-types are shown in Table
-\begin_inset LatexCommand ref
-reference "cap:Fundamental-Data-Types"
-
-\end_inset
-
-.
- Along with their (mostly) C-derived names, the integer, float, and complex
- data-types are also available using a bit-width convention so that an array
- of the right size can always be ensured (
-\emph on
-e.g.
-
-\emph default
- int8, float64, complex128).
- The C-like names are also accessible using a character code which is also
- shown in the table (use of the character codes, however, is discouraged).
- Names for the data types that would clash with standard Python object names
- are followed by a trailing underscore, '_'.
- These data types are so named because they use the same underlying precision
- as the corresponding Python data types.
- Most scientific users should be able to use the array-enhanced scalar objects
- in place of the Python objects.
- The array-enhanced scalars inherit from the Python objects they can replace
- and should act like them under all circumstances (except for how errors
- are handled in math computations).
-
-\end_layout
-
-\begin_layout Tip
-The array types
-\series bold
-bool
-\series default
-_,
-\series bold
-int
-\series default
-_,
-\series bold
-complex
-\series default
-_,
-\series bold
-float
-\series default
-_,
-\series bold
-object
-\series default
-_,
-\series bold
-unicode
-\series default
-_, and
-\series bold
-str_
-\series default
- are enhanced-scalars.
- They are very similar to the standard Python types (without the trailing
- underscore) and inherit from them (except for bool_ and object_).
- They can be used in place of the standard Python types whenever desired.
- Whenever a data type is required, as an argument, the standard Python types
- are recognized as well.
-\end_layout
-
-\begin_layout Standard
-Three of the data types are flexible in that they can have items that are
- of an arbitrary size: the
-\family typewriter
-str_
-\family default
- type, the
-\family typewriter
-unicode_
-\family default
- type, and the
-\family typewriter
-void
-\family default
- type.
- While, you can specify an arbitrary size for these types, every item in
- an array is still of that specified size.
- The void type, for example, allows for arbitrary records to be defined
- as elements of the array, and can be used to define exotic types built
- on top of the basic
-\family typewriter
-ndarray
-\family default
-.
-\end_layout
-
-\begin_layout Standard
-\begin_inset Float table
-wide false
-sideways false
-status open
-
-\begin_layout Standard
-\begin_inset Caption
-
-\begin_layout Standard
-\begin_inset LatexCommand label
-name "cap:Fundamental-Data-Types"
-
-\end_inset
-
-Built-in array-scalar types corresponding to data-types for an ndarray.
- The bold-face types correspond to standard Python types.
- The object_ type is special because arrays with dtype='O' do not return
- an array scalar on item access but instead return the actual object referenced
- in the array.
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\align center
-\begin_inset Tabular
-<lyxtabular version="3" rows="24" columns="3">
-<features>
-<column alignment="center" valignment="top" leftline="true" width="0">
-<column alignment="center" valignment="top" leftline="true" width="0">
-<column alignment="center" valignment="top" leftline="true" rightline="true" width="0">
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Type
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Bit-Width
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Character
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-bool_
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-boolXX
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'?'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-byte
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-intXX
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'b'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-short
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'h'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-intc
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'i'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-int_
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'l'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-longlong
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'q'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-intp
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'p'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-ubyte
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-uintXX
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'B'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-ushort
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'H'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-uintc
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'I'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-uint
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'L'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-ulonglong
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'Q'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-uintp
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'P'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-single
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-floatXX
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'f'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-float_
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'d'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-longfloat
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'g'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-csingle
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-complexXX
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'F'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-complex_
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'D'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-clongfloat
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'G'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-object_
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'O'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-str_
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'S#'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-unicode_
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'U#'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-void
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family typewriter
-'V#'
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Note
-The two types
-\family typewriter
-intp
-\family default
- and
-\family typewriter
-uintp
-\family default
- are not separate types.
- They are names bound to a specific integer type just large enough to hold
- a memory address (a pointer) on the platform.
-\end_layout
-
-\begin_layout Warning
-Numeric Compatibility: If you used old typecode characters in your Numeric
- code (which was never recommended), you will need to change some of them
- to the new characters.
- In particular, the needed changes are 'c->'S1', 'b'->'B', '1'->'b', 's'->'h',
- 'w'->'H', and 'u'->'I'.
- These changes make the typecharacter convention more consistent with other
- Python modules such as the struct module.
-\end_layout
-
-\begin_layout Standard
-The fundamental data-types are arranged into a hierarchy of Python type-objects
- shown in Figure
-\begin_inset LatexCommand ref
-reference "cap:Hierarchy-of-type"
-
-\end_inset
-
-.
- Each of the leaves on this hierarchy correspond to actual data-types that
- arrays can have (in other words, there is a built in dtype object associated
- with each of these new types).
- They also correspond to new Python objects that can be created.
- These new objects are
-\begin_inset Quotes eld
-\end_inset
-
-scalar
-\begin_inset Quotes erd
-\end_inset
-
- types corresponding to each fundamental data-type.
- Their purpose is to smooth out the rough edges that result when mixing
- scalar and array operations.
- These scalar objects will be discussed in more detail in Chapter
-\begin_inset LatexCommand ref
-reference "cha:Scalar-objects"
-
-\end_inset
-
-.
- The other types in the hierarchy define particular categories of types.
- These categories can be useful for testing whether or not the object returned
- by
-\family typewriter
-self.dtype.type
-\family default
- is of a particular class (using
-\family typewriter
-issubclass
-\family default
-).
-\end_layout
-
-\begin_layout Standard
-\begin_inset Float figure
-wide false
-sideways false
-status open
-
-\begin_layout Standard
-\align center
-\begin_inset Graphics
- filename Figures/hierarchy.eps
- lyxscale 75
- width 95text%
- keepAspectRatio
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset Caption
-
-\begin_layout Standard
-\begin_inset LatexCommand label
-name "cap:Hierarchy-of-type"
-
-\end_inset
-
-Hierarchy of type objects representing the array data types.
- Not shown are the two integer types
-\family typewriter
-intp
-\family default
- and
-\family typewriter
-uintp
-\family default
- which just point to the integer type that holds a pointer for the platform.
- All the number types can be obtained using bit-width names as well.
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Basic indexing (slicing)
-\end_layout
-
-\begin_layout Standard
-Indexing
-\begin_inset LatexCommand index
-name "indexing"
-
-\end_inset
-
- is a powerful tool in Python and NumPy takes full advantage of this power.
- In fact, some of capabilities of Python's indexing were first established
- by the needs of Numeric users.
-\begin_inset Foot
-status open
-
-\begin_layout Standard
-For example, the ability to index with a comma separated list of objects
- and have it correspond to indexing with a tuple is a feature added to Python
- at the request of the NumPy community.
- The Ellipsis object was also added to Python explicitly for the NumPy community.
- Extended slicing (wherein a step can be provided) was also a feature added
- to Python because of Numeric.
-\end_layout
-
-\end_inset
-
- Indexing is also sometimes called slicing in Python, and slicing for an
-
-\family typewriter
-ndarray
-\family default
- works very similarly as it does for other Python sequences.
- There are three big differences: 1) slicing can be done over multiple dimension
-s, 2) exactly one ellipsis object can be used to indicate several dimensions
- at once, 3) slicing cannot be used to expand the size of an array (unlike
- lists).
-\end_layout
-
-\begin_layout Standard
-A few examples should make slicing more clear.
- Suppose
-\begin_inset Formula $A$
-\end_inset
-
- is a
-\begin_inset Formula $10\times20$
-\end_inset
-
- array, then
-\begin_inset Formula $A[3]$
-\end_inset
-
- is the same as
-\begin_inset Formula $A[3,:]$
-\end_inset
-
- and represents the 4th length-20
-\begin_inset Quotes eld
-\end_inset
-
-row
-\begin_inset Quotes erd
-\end_inset
-
- of the array.
- On the other hand,
-\begin_inset Formula $A[:,3]$
-\end_inset
-
- represents the 4th length-10
-\begin_inset Quotes eld
-\end_inset
-
-column
-\begin_inset Quotes erd
-\end_inset
-
- of the array.
- Every third element of the 4th column can be selected as
-\begin_inset Formula $A[::3,3]$
-\end_inset
-
-.
- Ellipses can be used to replace zero or more
-\begin_inset Quotes eld
-\end_inset
-
-:
-\begin_inset Quotes erd
-\end_inset
-
- terms.
- In other words, an Ellipsis
-\begin_inset LatexCommand index
-name "Ellipsis"
-
-\end_inset
-
- object expands to zero or more full slice objects (
-\begin_inset Quotes eld
-\end_inset
-
-:
-\begin_inset Quotes erd
-\end_inset
-
-) so that the total number of dimensions in the slicing tuple matches the
- number of dimensions in the array.
- Thus, if
-\begin_inset Formula $A$
-\end_inset
-
- is
-\begin_inset Formula $10\times20\times30\times40$
-\end_inset
-
-, then
-\begin_inset Formula $A[3:,...,4]$
-\end_inset
-
- is equivalent to
-\begin_inset Formula $A[3:,:,:,4]$
-\end_inset
-
- while
-\begin_inset Formula $A[...,3]$
-\end_inset
-
- is equivalent to
-\begin_inset Formula $A[:,:,:,3].$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-The following code illustrates some of these concepts:
-\end_layout
-
-\begin_layout MyCode
->>> a = arange(60).reshape(3,4,5); print a
-\newline
-[[[ 0 1 2 3 4]
-\newline
- [ 5 6 7
- 8 9]
-\newline
- [10 11 12 13 14]
-\newline
- [15 16 17 18 19]]
-\newline
-
-\newline
- [[20 21 22 23 24]
-\newline
- [25 26 27
- 28 29]
-\newline
- [30 31 32 33 34]
-\newline
- [35 36 37 38 39]]
-\newline
-
-\newline
- [[40 41 42 43 44]
-\newline
- [45 46 47
- 48 49]
-\newline
- [50 51 52 53 54]
-\newline
- [55 56 57 58 59]]]
-\end_layout
-
-\begin_layout Standard
-\InsetSpace ~
-
-\end_layout
-
-\begin_layout MyCode
->>> print a[...,3]
-\newline
-[[ 3 8 13 18]
-\newline
- [23 28 33 38]
-\newline
- [43 48 53 58]]
-\newline
->>> print a[1,...,3]
-\newline
-[23
- 28 33 38]
-\newline
->>> print a[:,:,2]
-\newline
-[[ 2 7 12 17]
-\newline
- [22 27 32 37]
-\newline
- [42 47 52 57]]
-\newline
->>>
- print a[0,::2,::2]
-\newline
-[[ 0 2 4]
-\newline
- [10 12 14]]
-\end_layout
-
-\begin_layout Section
-Memory Layout of
-\family typewriter
-ndarray
-\end_layout
-
-\begin_layout Standard
-On a fundamental level, an
-\begin_inset Formula $N$
-\end_inset
-
--dimensional array object is just a one-dimensional sequence of memory with
- fancy indexing code that maps an
-\begin_inset Formula $N$
-\end_inset
-
--dimensional index into a one-dimensional index.
- The one-dimensional index is necessary on some level because that is how
- memory is addressed in a computer.
- The fancy indexing, however, can be very helpful for translating our ideas
- into computer code.
- This is because many concepts we wish to model on a computer have a natural
- representation as an
-\begin_inset Formula $N$
-\end_inset
-
--dimensional array.
- While this is especially true in science and engineering, it is also applicable
- to many other arenas which can be appreciated by considering the popularity
- of the spreadsheet as well as
-\begin_inset Quotes eld
-\end_inset
-
-image processing
-\begin_inset Quotes erd
-\end_inset
-
- applications.
-\end_layout
-
-\begin_layout Warning
-Some high-level languages give pre-eminence to a particular use of 2-dimensional
- arrays as Matrices.
- In NumPy, however, the core object is the more general
-\begin_inset Formula $N$
-\end_inset
-
--dimensional array.
- NumPy defines a matrix object as a sub-class of the N-dimensional array.
-
-\end_layout
-
-\begin_layout Standard
-In order to more fully understand the array object along with its attributes
- and methods it is important to learn more about how an
-\begin_inset Formula $N$
-\end_inset
-
--dimensional array is represented in the computer's memory.
- A complete understanding of this layout is only essential for optimizing
- algorithms operating on general purpose arrays.
- But, even for the casual user, a general understanding of memory layout
- will help to explain the use of certain array attributes that may otherwise
- be mysterious.
-
-\end_layout
-
-\begin_layout Subsection
-Contiguous Memory Layout
-\end_layout
-
-\begin_layout Standard
-There is a fundamental ambiguity in how the mapping to a one-dimensional
- index can take place which is illustrated for a 2-dimensional array in
- Figure
-\begin_inset LatexCommand ref
-reference "cap:Options-for-memory"
-
-\end_inset
-
-.
- In that figure, each block represents a chunk of memory that is needed
- for representing the underlying array element.
- For example, each block could represent the 8 bytes needed to represent
- a double-precision floating point number.
-
-\end_layout
-
-\begin_layout Standard
-In the figure, two arrays are shown, a
-\begin_inset Formula $4x3$
-\end_inset
-
- array and a
-\begin_inset Formula $3x4$
-\end_inset
-
- array.
- Each of these arrays takes 12 blocks of memory shown as a single, contiguous
- segment.
- How this memory is used to form the abstract 2-dimensional array can vary,
- however, and the
-\family typewriter
-ndarray
-\family default
- object supports both styles.
- Which style is in use can be interrogated by the use of the flags attribute
- which returns a dictionary of the state of array flags.
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset Float figure
-wide false
-sideways false
-status open
-
-\begin_layout Standard
-\align center
-\begin_inset Graphics
- filename Figures/contiguous.eps
- width 85text%
- keepAspectRatio
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset Caption
-
-\begin_layout Standard
-\begin_inset LatexCommand label
-name "cap:Options-for-memory"
-
-\end_inset
-
-Options for memory layout of a 2-dimensional array.
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-In the C-style of
-\begin_inset Formula $N$
-\end_inset
-
--dimensional indexing shown on the left of Figure
-\begin_inset LatexCommand ref
-reference "cap:Options-for-memory"
-
-\end_inset
-
- the last
-\begin_inset Formula $N$
-\end_inset
-
--dimensional index
-\begin_inset Quotes eld
-\end_inset
-
-varies the fastest.
-\begin_inset Quotes erd
-\end_inset
-
- In other words, to move through computer memory sequentially, the last
- index is incremented first, followed by the second-to-last index and so
- forth.
- Some of the algorithms in NumPy that deal with
-\begin_inset Formula $N$
-\end_inset
-
--dimensional arrays work best with this kind of data.
-
-\end_layout
-
-\begin_layout Standard
-In the Fortran-style of
-\begin_inset Formula $N$
-\end_inset
-
--dimensional indexing shown on the right of Figure
-\begin_inset LatexCommand ref
-reference "cap:Options-for-memory"
-
-\end_inset
-
-, the first
-\begin_inset Formula $N$
-\end_inset
-
--dimensional index
-\begin_inset Quotes eld
-\end_inset
-
-varies the fastest.
-\begin_inset Quotes erd
-\end_inset
-
- Thus, to move through computer memory sequentially, the first index is
- incremented first until it reaches the limit in that dimension, then the
- second index is incremented and the first index is reset to zero.
- While NumPy can be compiled without the use of a Fortran compiler, several
- modules of SciPy (available separately) rely on underlying algorithms written
- in Fortran.
- Algorithms that work on
-\begin_inset Formula $N$
-\end_inset
-
--dimensional arrays that are written in Fortran typically expect Fortran-style
- arrays.
-
-\end_layout
-
-\begin_layout Standard
-The two-styles of memory layout for arrays are connected through the transpose
- operation.
- Thus, if
-\begin_inset Formula $A$
-\end_inset
-
- is a (contiguous) C-style array, then the same block of memory can be used
- to represent
-\begin_inset Formula $A^{T}$
-\end_inset
-
- as a (contiguous) Fortran-style array.
- This kind of understanding can be useful when trying to optimize the wrapping
- of Fortran subroutines, or if a more detailed understanding of how to write
- algorithms for generally-indexed arrays is desired.
- But, fortunately, the casual user who does not care if an array is copied
- occasionally to get it into the right orientation needed for a particular
- algorithm can forget about how the array is stored in memory and just visualize
- it as an
-\begin_inset Formula $N$
-\end_inset
-
--dimensional array (that is, after all, the whole point of creating the
-
-\family typewriter
-ndarray
-\family default
- object in the first place).
-
-\end_layout
-
-\begin_layout Subsection
-Non-contiguous memory layout
-\end_layout
-
-\begin_layout Standard
-Both of the examples presented above are
-\emph on
-single-segment
-\begin_inset LatexCommand index
-name "single-segment"
-
-\end_inset
-
-
-\emph default
- arrays where the entire array is visited by sequentially marching through
- memory one element at a time.
- When an algorithm in C or Fortran expects an N-dimensional array, this
- single segment (of a certain fundamental type) is usually what is expected
- along with the shape
-\begin_inset Formula $N$
-\end_inset
-
--tuple.
- With a single-segment of memory representing the array, the one-dimensional
- index into computer memory can always be computed from the
-\begin_inset Formula $N$
-\end_inset
-
--dimensional index.
- This concept is explored further in the following paragraphs.
-\end_layout
-
-\begin_layout Standard
-Let
-\begin_inset Formula $n_{i}$
-\end_inset
-
- be the value of the
-\begin_inset Formula $i^{\textrm{th}}$
-\end_inset
-
- index into an array whose shape is represented by the
-\begin_inset Formula $N$
-\end_inset
-
- integers
-\begin_inset Formula $d_{i}$
-\end_inset
-
- (
-\begin_inset Formula $i=0\ldots N-1).$
-\end_inset
-
- Then, the one-dimensional index into a C-style contiguous array is
-\begin_inset Formula \[
-n^{C}=\sum_{i=0}^{N-1}n_{i}\prod_{j=i+1}^{N-1}d_{j}\]
-
-\end_inset
-
- while the one-dimensional index into a Fortran-style contiguous array is
-
-\begin_inset Formula \[
-n^{F}=\sum_{i=0}^{N-1}n_{i}\prod_{j=0}^{i-1}d_{j}.\]
-
-\end_inset
-
- In these formulas we are assuming that
-\begin_inset Formula \[
-\prod_{j=k}^{m}d_{j}=d_{k}d_{k+1}\cdots d_{m-1}d_{m}\]
-
-\end_inset
-
-so that if
-\begin_inset Formula $m<k,$
-\end_inset
-
- the product is
-\begin_inset Formula $1.$
-\end_inset
-
- While perfectly general, these formulas may be a bit confusing at first
- glimpse.
- Let's see how they expand out for determining the one-dimensional index
- corresponding to the element
-\begin_inset Formula $\left(1,3,2\right)$
-\end_inset
-
- of a
-\begin_inset Formula $4\times5\times6$
-\end_inset
-
- array.
- If the array is stored as Fortran contiguous, then
-\begin_inset Formula \begin{eqnarray*}
-n^{F} & = & n_{0}\cdot\left(1\right)+n_{1}\cdot(4)+n_{2}\cdot\left(4\cdot5\right)\\
- & = & 1+3\cdot4+2\cdot20=53.\end{eqnarray*}
-
-\end_inset
-
- On the other hand, if the array is stored as C contiguous, then
-\begin_inset Formula \begin{eqnarray*}
-n^{C} & = & n_{0}\cdot\left(5\cdot6\right)+n_{1}\cdot\left(6\right)+n_{2}\cdot\left(1\right)\\
- & = & 1\cdot30+3\cdot6+2\cdot1=50.\end{eqnarray*}
-
-\end_inset
-
- The general pattern should be more clear from these examples.
-
-\end_layout
-
-\begin_layout Standard
-The formulas for the one-dimensional index of the N-dimensional arrays reveal
- what results in an important generalization for memory layout.
- Notice that each formula can be written as
-\begin_inset Formula \[
-n^{X}=\sum_{i=0}^{N-1}n_{i}s_{i}^{X}\]
-
-\end_inset
-
- where
-\begin_inset Formula $s_{i}^{X}$
-\end_inset
-
- gives the
-\emph on
-stride
-\begin_inset LatexCommand index
-name "stride"
-
-\end_inset
-
-
-\emph default
- for dimension
-\begin_inset Formula $i$
-\end_inset
-
-.
-\begin_inset Foot
-status open
-
-\begin_layout Standard
-Our definition of stride here is an element-based stride, while the strides
- attribute returns a byte-based stride.
- The byte-based stride is the element itemsize multiplied by the element-based
- stride.
-\end_layout
-
-\end_inset
-
- Thus, for C and Fortran contiguous arrays respectively we have
-\begin_inset Formula \begin{eqnarray*}
-s_{i}^{C} & = & \prod_{j=i+1}^{N-1}d_{j}=d_{i+1}d_{i+2}\cdots d_{N-1},\\
-s_{i}^{F} & = & \prod_{j=0}^{i-1}d_{j}=d_{0}d_{1}\cdots d_{i-1}.\end{eqnarray*}
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-The stride is how many elements in the underlying one-dimensional layout
- of the array one must jump in order to get to the next array element of
- a specific dimension in the N-dimensional layout.
- Thus, in a C-style
-\begin_inset Formula $4\times5\times6$
-\end_inset
-
- array one must jump over 30 elements to increment the first index by one,
- so 30 is the stride for the first dimension (
-\begin_inset Formula $s_{0}^{C}=30$
-\end_inset
-
-).
- If, for each array, we define a strides tuple with
-\begin_inset Formula $N$
-\end_inset
-
- integers, then we have pre-computed and stored an important piece of how
- to map the
-\begin_inset Formula $N$
-\end_inset
-
--dimensional index to the one-dimensional one used by the computer.
-
-\end_layout
-
-\begin_layout Standard
-In addition to providing a pre-computed table for index mapping, by allowing
- the strides tuple to consist of arbitrary integers we have provided a more
- general layout for the
-\begin_inset Formula $N$
-\end_inset
-
--dimensional array.
- As long as we always use the stride information to move around in the
-\begin_inset Formula $N$
-\end_inset
-
--dimensional array, we can use any convenient layout we wish for the underlying
- representation as long as it is regular enough to be defined by constant
- jumps in each dimension.
- The
-\family typewriter
-ndarray
-\family default
- object of NumPy uses this stride information and therefore the underlying
- memory of an
-\family typewriter
-ndarray
-\family default
- can be laid out dis-contiguously.
-
-\end_layout
-
-\begin_layout Note
-Several algorithms in NumPy work on arbitrarily strided arrays.
- However, some algorithms require single-segment arrays.
- When an irregularly strided array is passed in to such algorithms, a copy
- is automatically made.
-
-\end_layout
-
-\begin_layout Standard
-An important situation where irregularly strided arrays occur is array indexing.
- Consider again Figure
-\begin_inset LatexCommand ref
-reference "cap:Options-for-memory"
-
-\end_inset
-
-.
- In that figure a high-lighted sub-array is shown.
- Define
-\begin_inset Formula $C$
-\end_inset
-
- to be the
-\begin_inset Formula $4\times3$
-\end_inset
-
- C contiguous array and
-\begin_inset Formula $F$
-\end_inset
-
- to be the
-\begin_inset Formula $3\times4$
-\end_inset
-
- Fortran contiguous array.
- The highlighted areas can be written respectively as
-\begin_inset Formula $C$
-\end_inset
-
-[1:3,1:3] and
-\begin_inset Formula $F$
-\end_inset
-
-[1:3,1:3].
- As evidenced by the corresponding highlighted region in the one-dimensional
- view of the memory, these sub-arrays are neither C contiguous nor Fortran
- contiguous.
- However, they can still be represented by an
-\family typewriter
-ndarray
-\family default
- object using the same striding tuple as the original array used.
- Therefore, a regular indexing expression on an
-\family typewriter
-ndarray
-\family default
- can always produce an
-\family typewriter
-ndarray
-\family default
- object
-\emph on
-without
-\emph default
- copying any data.
- This is sometimes referred to as the
-\begin_inset Quotes eld
-\end_inset
-
-view
-\begin_inset Quotes erd
-\end_inset
-
- feature of array indexing, and one can see that it is enabled by the use
- of striding information in the underlying
-\family typewriter
-ndarray
-\family default
- object.
- The greatest benefit of this feature is that it allows indexing to be done
- very rapidly and without exploding memory usage (because no copies of the
- data are made).
-\end_layout
-
-\begin_layout Section
-Universal Functions for arrays
-\end_layout
-
-\begin_layout Standard
-NumPy provides a wealth of mathematical functions that operate on then ndarray
- object.
- From algebraic functions such as addition and multiplication to trigonometric
- functions such as
-\begin_inset Formula $\sin,$
-\end_inset
-
- and
-\begin_inset Formula $\cos$
-\end_inset
-
-.
- Each universal function
-\begin_inset LatexCommand index
-name "universal function"
-
-\end_inset
-
- (
-\family typewriter
-ufunc
-\family default
-
-\begin_inset LatexCommand index
-name "ufunc"
-
-\end_inset
-
-) is an instance of a general class so that function behavior is the same.
- All ufuncs perform element-by-element operations over an array or a set
- of arrays (for multi-input functions).
- The ufuncs themselves and their methods are documented in Part
-\begin_inset LatexCommand ref
-reference "par:The-Ufunc-Object"
-
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Standard
-One important aspect of ufunc behavior that should be introduced early,
- however, is the idea of
-\emph on
-
-\begin_inset LatexCommand index
-name "broadcasting"
-
-\end_inset
-
-broadcasting
-\emph default
-.
- Broadcasting is used in several places throughout NumPy and is therefore
- worth early exposure.
- To understand the idea of broadcasting, you first have to be conscious
- of the fact that all ufuncs are always element-by-element operations.
- In other words, suppose we have a ufunc with two inputs and one output
- (
-\emph on
-e.g.
-
-\emph default
- addition) and the inputs are both arrays of shape
-\begin_inset Formula $4\times6\times5$
-\end_inset
-
-.
- Then, the output is going to be
-\begin_inset Formula $4\times6\times5$
-\end_inset
-
-, and will be the result of applying the underlying function (
-\emph on
-e.g.
-
-\emph default
-
-\begin_inset Formula $+$
-\end_inset
-
-) to each pair of inputs to produce the output at the corresponding
-\begin_inset Formula $N$
-\end_inset
-
--dimensional location.
-
-\end_layout
-
-\begin_layout Standard
-Broadcasting allows ufuncs to deal in a meaningful way with inputs that
- do not have exactly the same shape.
- In particular, the first rule of broadcasting is that if all input arrays
- do not have the same number of dimensions, then a
-\begin_inset Quotes eld
-\end_inset
-
-
-\begin_inset Formula $1$
-\end_inset
-
-
-\begin_inset Quotes erd
-\end_inset
-
- will be repeatedly pre-pended to the shapes of the smaller arrays until
- all the arrays have the same number of dimensions.
- The second rule of broadcasting ensures that arrays with a size of 1 along
- a particular dimension act as if they had the size of the array with the
- largest shape along that dimension.
- The value of the array element is assumed to be the same along that dimension
- for the
-\begin_inset Quotes eld
-\end_inset
-
-broadcasted
-\begin_inset Quotes erd
-\end_inset
-
- array.
- After application of the broadcasting rules, the sizes of all arrays must
- match.
-\end_layout
-
-\begin_layout Standard
-While a little tedious to explain, the broadcasting rules are easy to pick
- up by looking at a couple of examples.
- Suppose there is a
-\family typewriter
-ufunc
-\family default
- with two inputs,
-\begin_inset Formula $A$
-\end_inset
-
- and
-\begin_inset Formula $B$
-\end_inset
-
-.
- Now supposed that
-\begin_inset Formula $A$
-\end_inset
-
- has shape
-\begin_inset Formula $4\times6\times5$
-\end_inset
-
- while
-\begin_inset Formula $B$
-\end_inset
-
- has shape
-\begin_inset Formula $4\times6\times1$
-\end_inset
-
-.
- The ufunc will proceed to compute the
-\begin_inset Formula $4\times6\times5$
-\end_inset
-
- output as if
-\begin_inset Formula $B$
-\end_inset
-
- had been
-\begin_inset Formula $4\times6\times5$
-\end_inset
-
- by assuming that
-\begin_inset Formula $B[...,k]=B[...,0]$
-\end_inset
-
- for
-\begin_inset Formula $k=1,2,3,4$
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Standard
-Another example illustrates the idea of adding
-\begin_inset Formula $1$
-\end_inset
-
-'s to the beginning of the array shape-tuple.
- Suppose
-\begin_inset Formula $A$
-\end_inset
-
- is the same as above, but
-\begin_inset Formula $B$
-\end_inset
-
- is a length
-\begin_inset Formula $5$
-\end_inset
-
- array.
- Because of the first rule,
-\begin_inset Formula $B$
-\end_inset
-
- will be interpreted as a
-\begin_inset Formula $1\times1\times5$
-\end_inset
-
- array, and then because of the second rule
-\begin_inset Formula $B$
-\end_inset
-
- will be interpreted as a
-\begin_inset Formula $4\times6\times5$
-\end_inset
-
- array by repeating the elements of
-\begin_inset Formula $B$
-\end_inset
-
- in the obvious way.
-
-\end_layout
-
-\begin_layout Standard
-The most common alteration needed is to route-around the automatic pre-pending
- of 1's to the shape of the array.
- If it is desired, to add
-\begin_inset Formula $1$
-\end_inset
-
-'s to the end of the array shape, then dimensions can always be added using
- the
-\family typewriter
-newaxis
-\family default
- name in NumPy:
-\begin_inset Formula $B[...,\textrm{newaxis, newaxis}]$
-\end_inset
-
- returns an array with 2 additional 1's appended to the shape of
-\begin_inset Formula $B.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-One important aspect of broadcasting is the calculation of functions on
- regularly spaced grids.
- For example, suppose it is desired to show a portion of the multiplication
- table by computing the function
-\begin_inset Formula $a*b$
-\end_inset
-
- on a grid with
-\begin_inset Formula $a$
-\end_inset
-
- running from 6 to 9 and
-\begin_inset Formula $b$
-\end_inset
-
- running from 12 to 16.
- The following code illustrates how this could be done using ufuncs and
- broadcasting.
-
-\end_layout
-
-\begin_layout MyCode
->>> a = arange(6, 10); print a
-\newline
-[6 7 8 9]
-\newline
->>> b = arange(12, 17); print b
-\newline
-[12
- 13 14 15 16]
-\newline
->>> table = a[:,newaxis] * b
-\newline
->>> print table
-\newline
-[[ 72 78 84 90
- 96]
-\newline
- [ 84 91 98 105 112]
-\newline
- [ 96 104 112 120 128]
-\newline
- [108 117 126 135 144]]
-\end_layout
-
-\begin_layout Section
-Summary of new features
-\end_layout
-
-\begin_layout Standard
-More information about using arrays in Python can be found in the old Numeric
- documentation at
-\begin_inset LatexCommand htmlurl
-name "http://numeric.scipy.org"
-target "http://numeric.scipy.org"
-
-\end_inset
-
-.
- Quite a bit of that documentation is still accurate, especially in the
- discussion of array basics.
- There are significant differences, however, and this book seeks to explain
- them in detail.
- The following list tries to summarize the significant new features (over
- Numeric) available in the
-\family typewriter
-ndarray
-\family default
- and
-\family typewriter
-ufunc
-\family default
- objects of NumPy:
-\end_layout
-
-\begin_layout Enumerate
-more data types (all standard C-data types plus complex floats, Boolean,
- string, unicode, and void *);
-\end_layout
-
-\begin_layout Enumerate
-flexible data types where each array can have a different itemsize (but
- all elements of the same array still have the same itemsize);
-\end_layout
-
-\begin_layout Enumerate
-there is a true Python scalar type (contained in a hierarchy of types) for
- every data-type an array can have;
-\end_layout
-
-\begin_layout Enumerate
-data-type objects define the data-type with support for data-type objects
- with fields and subarrays which allow record arrays with nested records;
-\end_layout
-
-\begin_layout Enumerate
-many more array methods in addition to functional counterparts;
-\end_layout
-
-\begin_layout Enumerate
-attributes more clearly distinguished from methods (attributes are intrinsic
- parts of an array so that setting them changes the array itself);
-\end_layout
-
-\begin_layout Enumerate
-array scalars covering all data types which inherit from Python scalars
- when appropriate;
-\end_layout
-
-\begin_layout Enumerate
-arrays can be misaligned, swapped, and in Fortran order in memory (facilitates
- memory-mapped arrays);
-\end_layout
-
-\begin_layout Enumerate
-arrays can be more easily read from text files and created from buffers
- and iterators;
-\end_layout
-
-\begin_layout Enumerate
-arrays can be quickly written to files in text and/or binary mode;
-\end_layout
-
-\begin_layout Enumerate
-arrays support the removal of the 64-bit memory limitation as long as you
- have Python 2.5 or later;
-\end_layout
-
-\begin_layout Enumerate
-fancy indexing can be done on arrays using integer sequences and Boolean
- masks;
-\end_layout
-
-\begin_layout Enumerate
-coercion rules are altered for mixed scalar / array operations so that scalars
- (anything that produces a 0-dimensional array internally) will not determine
- the output type in such cases.
-\end_layout
-
-\begin_layout Enumerate
-when coercion is needed, temporary buffer-memory allocation is limited to
- a user-adjustable size;
-\end_layout
-
-\begin_layout Enumerate
-errors are handled through the IEEE floating point status flags and there
- is flexibility on a per-thread level for handling these errors;
-\end_layout
-
-\begin_layout Enumerate
-one can register an error callback function in Python to handle errors are
- set to 'call' for their error handling;
-\end_layout
-
-\begin_layout Enumerate
-ufunc reduce, accumulate, and reduceat can take place using a different
- type then the array type if desired (without copying the entire array);
-\end_layout
-
-\begin_layout Enumerate
-ufunc output arrays passed in can be a different type than expected from
- the calculation;
-\end_layout
-
-\begin_layout Enumerate
-ufuncs take keyword arguments which can specify 1) the error handling explicitly
- and 2) the specific 1-d loop to use by-passing the type-coercion detection.
-
-\end_layout
-
-\begin_layout Enumerate
-arbitrary classes can be passed through ufuncs (__array_wrap__ and __array_prior
-ity__ expand previous __array__ method);
-\end_layout
-
-\begin_layout Enumerate
-ufuncs can be easily created from Python functions;
-\end_layout
-
-\begin_layout Enumerate
-ufuncs have attributes to detail their behavior, including a dynamic doc
- string that automatically generates the calling signature;
-\end_layout
-
-\begin_layout Enumerate
-several new ufuncs (frexp, modf, ldexp, isnan, isfinite, isinf, signbit);
-\end_layout
-
-\begin_layout Enumerate
-new types can be registered with the system so that specialized ufunc loops
- can be written over new type objects;
-\end_layout
-
-\begin_layout Enumerate
-new types can also register casting functions and rules for fitting into
- the
-\begin_inset Quotes eld
-\end_inset
-
-can-cast
-\begin_inset Quotes erd
-\end_inset
-
- hierarchy;
-\end_layout
-
-\begin_layout Enumerate
-C-API enhanced so that more of the functionality is available from compiled
- code;
-\end_layout
-
-\begin_layout Enumerate
-C-API enhanced so array structure access can take place through macros;
-\end_layout
-
-\begin_layout Enumerate
-new iterator objects created for easy handling in C of non-contiguous arrays;
-\end_layout
-
-\begin_layout Enumerate
-new multi-iterator object created for easy handling in C of broadcasting;
-\end_layout
-
-\begin_layout Enumerate
-types have more functions associated with them (no magic function lists
- in the C-code).
- Any function needed is part of the type structure.
-\end_layout
-
-\begin_layout Standard
-All of these enhancements will be documented more thoroughly in the remaining
- portions of this book.
-\end_layout
-
-\begin_layout Section
-Summary of differences with Numeric
-\end_layout
-
-\begin_layout Standard
-An effort was made to retain backwards compatibility with Numeric all the
- way to the C-level.
- This was mostly accomplished, with a few changes that needed to be made
- for consistency of the new system.
- If you are just starting out with NumPy, then this section may be skipped.
-\end_layout
-
-\begin_layout Standard
-There are two steps (one required and one optional) to converting code that
- works with Numeric to work fully with NumPy The first step uses a compatibility
- layer and requires only small changes which can be handled by the numpy.oldnumer
-ic.alter_code1 module.
- Code written to the compatibility layer will work and be supported.
- The purpose of the compatibility layer is to make it easy to convert to
- NumPy and many codes may only take this first step and work fine with NumPy.
- The second step is optional as it removes dependency on the compatibility
- layer and therefore requires a few more extensive changes.
- Many of these changes can be performed by the numpy.oldnumeric.alter_code2
- module, but you may still need to do some final tweaking by hand.
- Because many users will probably be content to only use the first step,
- the alter_code2 module for second-stage migration may not be as complete
- as it otherwise could be.
-
-\end_layout
-
-\begin_layout Subsection
-First-step changes
-\end_layout
-
-\begin_layout Standard
-In order to use the compatibility layer there are still a few changes that
- need to be made to your code.
- Many of these changes can be made by running the alter_code1 module with
- your code as input.
-
-\end_layout
-
-\begin_layout Enumerate
-Importing (the alter_code1 module handles all these changes)
-\end_layout
-
-\begin_deeper
-\begin_layout Enumerate
-import Numeric --> import numpy.oldnumeric as Numeric
-\end_layout
-
-\begin_layout Enumerate
-import Numeric as XX --> import numpy.oldnumeric as XX
-\end_layout
-
-\begin_layout Enumerate
-from Numeric import <name1>,...<nameN> --> from numpy.oldnumeric import <name1>,...,<na
-meN>
-\end_layout
-
-\begin_layout Enumerate
-from Numeric import * --> from numpy.oldnumeric import *
-\end_layout
-
-\begin_layout Enumerate
-Similar name changes need to be made for Matrix, MLab, UserArray, LinearAlgebra,
- RandomArray RNG, RNG.Statistics, and FFT.
- The new names are numpy.oldnumeric.<pkg> where <pkg> is matrix, mlab, user_array,
- linear_algebra, random_array, rng, rng_stats, and fft.
-
-\end_layout
-
-\begin_layout Enumerate
-multiarray and umath (if you used them directly) are now numpy.core.multiarray
- and numpy.core.umath, but it is more future proof to replace usages of these
- internal modules with numpy.oldnumeric.
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-Method name changes and methods converted to attributes.
- The alter_code1 module handles all these changes.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Enumerate
-
-\emph on
-arr
-\emph default
-.typecode() -->
-\emph on
-arr
-\emph default
-.dtype.char
-\end_layout
-
-\begin_layout Enumerate
-
-\emph on
-arr
-\emph default
-.iscontiguous() -->
-\emph on
-arr
-\emph default
-.flags.contiguous
-\end_layout
-
-\begin_layout Enumerate
-
-\emph on
-arr
-\emph default
-.byteswapped() -->
-\emph on
-arr
-\emph default
-.byteswap()
-\end_layout
-
-\begin_layout Enumerate
-
-\emph on
-arr
-\emph default
-.toscalar() -->
-\emph on
-arr
-\emph default
-.item()
-\end_layout
-
-\begin_layout Enumerate
-
-\emph on
-arr
-\emph default
-.itemsize() -->
-\emph on
-arr
-\emph default
-.itemsize
-\end_layout
-
-\begin_layout Enumerate
-
-\emph on
-arr
-\emph default
-.spacesaver() eliminated
-\end_layout
-
-\begin_layout Enumerate
-
-\emph on
-arr
-\emph default
-.savespace() eliminated
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-Some of the typecode characters have changed to be more consistent with
- other Python modules (array and struct).
- You should only notice this change if you used the actual typecode characters
- (instead of the named constants).
-
-\newline
-The alter_code1 module will change uses of 'b' to 'B' for internal Numeric
- functions that it knows about because NumPy will interpret 'b' to mean
- a signed byte type (instead of the old unsigned).
- It will also change the character codes when they are used explicitly in
- the .astype method.
- In the compatibility layer (and only in the compatibility layer), typecode-requ
-iring function calls (
-\emph on
-e.g.
-
-\emph default
- zeros, array) understand the old typecode characters.
-
-\newline
-The changes are (Numeric --> NumPy):
-\end_layout
-
-\begin_deeper
-\begin_layout Enumerate
-'b' --> 'B'
-\end_layout
-
-\begin_layout Enumerate
-'1' --> 'b'
-\end_layout
-
-\begin_layout Enumerate
-'s' --> 'h'
-\end_layout
-
-\begin_layout Enumerate
-'w' --> 'H'
-\end_layout
-
-\begin_layout Enumerate
-'u' --> 'I'
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-
-\emph on
-arr.
-\emph default
-flat now returns an indexable 1-D iterator.
- This behaves correctly when passed to a function, but if you expected methods
- or attributes on
-\emph on
-arr.
-\emph default
-flat --- besides .copy() --- then you will need to replace
-\emph on
-arr
-\emph default
-.flat with
-\emph on
-arr.
-\emph default
-ravel() (copies only when necessary) or
-\emph on
-arr.
-\emph default
-flatten() (always copies).
- The alter_code1 module will change
-\emph on
-arr
-\emph default
-.flat to
-\emph on
-arr
-\emph default
-.ravel() unless you used the construct
-\emph on
-arr
-\emph default
-.flat = obj or
-\emph on
-arr
-\emph default
-.flat[ind].
-\end_layout
-
-\begin_layout Enumerate
-If you used type-equality testing on the objects returned from arrays, then
- you need to change this to isinstance testing.
- Thus type(a[0]) is float or type(a[0]) == float should be changed to isinstance
-(a[0], float).
- This is because array scalar objects are now returned from arrays.
- These inherit from the Python scalars where they can, but define their
- own methods and attributes.
- This conversion is done by alter_code1 for the types (float, int, complex,
- and ArrayType)
-\end_layout
-
-\begin_layout Enumerate
-If your code should produce 0-d arrays.
- These no-longer have a length as they should be interpreted similarly to
- real scalars which don't have a length.
-
-\end_layout
-
-\begin_layout Enumerate
-Arrays cannot be tested for truth value unless they are empty (returns False)
- or have only one element.
- This means that if Z: where Z is an array will fail (unless Z is empty
- or has only one element).
- Also the 'and' and 'or' operations (which test for object truth value)
- will also fail on arrays of more than one element.
- Use the .any() and .all() methods to test for truth value of an array.
-
-\end_layout
-
-\begin_layout Enumerate
-Masked arrays return a special nomask object instead of None when there
- is no mask on the array for the functions getmask and attribute access
-
-\emph on
-arr
-\emph default
-.mask
-\end_layout
-
-\begin_layout Enumerate
-Masked array functions have a default axis of None (meaning ravel), make
- sure to specify an axis if your masked arrays are larger than 1-d.
-
-\end_layout
-
-\begin_layout Enumerate
-If you used the construct
-\family typewriter
-arr.shape=<tuple>
-\family default
-, this will not work for array scalars (which can be returned from array
- operations).
- You cannot set the shape of an array-scalar (you can read it though).
- As a result, for more general code you should use
-\family typewriter
-arr=arr.reshape(<tuple>)
-\family default
- which works for both array-scalars and arrays.
-
-\end_layout
-
-\begin_layout Standard
-The alter_code1 script should handle the changes outlined in steps 1-5 above.
- The final incompatibilities in 6-9 are less common and must be modified
- by hand if necessary.
-
-\end_layout
-
-\begin_layout Subsection
-Second-step changes
-\end_layout
-
-\begin_layout Standard
-During the second phase of migration (should it be necessary) the compatibility
- layer is dropped.
- This phase requires additional changes to your code.
- There is another conversion module (alter_code2) which can help but it
- is not complete.
- The changes required to drop dependency on the compatibility layer are
-\end_layout
-
-\begin_layout Enumerate
-Importing
-\end_layout
-
-\begin_deeper
-\begin_layout Enumerate
-numpy.oldnumeric --> numpy
-\end_layout
-
-\begin_layout Enumerate
-from numpy.oldnumeric import * --> from numpy import * (this may clobber
- more names and therefore require further fixes to your code but then you
- didn't do this regularly anyway did you).
- The recommended procedure if this replacement causes problems is to fix
- the use of from numpy.oldnumeric import * to extract only the required names
- and then continue.
-\end_layout
-
-\begin_layout Enumerate
-numpy.oldnumeric.mlab --> None, the functions come from other places.
-\end_layout
-
-\begin_layout Enumerate
-numpy.oldnumeric.linear_algebra --> numpy.lilnalg with name changes to the
- functions (made lower case and shorter).
-\end_layout
-
-\begin_layout Enumerate
-numpy.oldnumeric.random_array --> numpy.random with some name changes to the
- functions.
-\end_layout
-
-\begin_layout Enumerate
-numpy.oldnumeic.fft --> numpy.fft with some name changes to the functions.
-\end_layout
-
-\begin_layout Enumerate
-numpy.oldnumeric.rng --> None
-\end_layout
-
-\begin_layout Enumerate
-numpy.oldnumeric.rng_stats --> None
-\end_layout
-
-\begin_layout Enumerate
-numpy.oldnumeric.user_array --> numpy.lib.user_array
-\end_layout
-
-\begin_layout Enumerate
-numpy.oldnumeric.matrix --> numpy
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-The typecode names are all lower-case and refer to type-objects corresponding
- to array scalars.
- The character codes are understood by array-creation functions but are
- not given names.
- All named type constants should be replaced with their lower-case equivalents.
- Also, the old character codes '1', 's', 'w', and 'u' are not understood
- as data-types.
- It is probably easiest to manually replace these with Int8, Int16, UInt16,
- and UInt32 and let the alter_code2 script convert the names to lower-case
- typeobjects.
-
-\end_layout
-
-\begin_layout Enumerate
-Keyword and argument changes
-\end_layout
-
-\begin_deeper
-\begin_layout Enumerate
-All
-\family typewriter
-typecode=
-\family default
- keywords must be changed to
-\family typewriter
-dtype=
-\family default
-.
-
-\end_layout
-
-\begin_layout Enumerate
-The
-\family typewriter
-savespace
-\family default
- keyword argument has been removed from all functions where it was present
- (array, sarray, asarray, ones, and zeros).
- The sarray function is equivalent to asarray.
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-The default data-type in NumPy is float unlike in Numeric (and numpy.oldnumeric)
- where it was int.
- There are several functions affected by this so that if your code was relying
- on the default data-type, then it must be changed to explicitly add dtype=int.
-\end_layout
-
-\begin_layout Enumerate
-The nonzero function in NumPy returns a tuple of index arrays just like
- the corresponding method.
- There is a flatnonzero function that first ravels the array and then returns
- a single index array.
- This function should be interchangeable with the old use of nonzero.
-
-\end_layout
-
-\begin_layout Enumerate
-The default axis is None (instead of 0) to match the methods for the functions
- take, repeat, sum, average, product, sometrue, alltrue, cumsum, and cumproduct
- (from Numeric) and also for the functions average, max, min, ptp, prod,
- std, and mean (from MLab).
-\end_layout
-
-\begin_layout Enumerate
-The default axis is None (instead of -1) to match the methods for the functions
- argmin, argmax, compress
-\end_layout
-
-\begin_layout Subsection
-Updating code that uses Numeric using alter_codeN
-\end_layout
-
-\begin_layout Standard
-Despite the long list of changes that might be needed given above, it is
- likely that your code does not use any of the incompatible corners and
- it should not be too difficult to convert from Numeric to NumPy.
- For example all of SciPy was converted in about 2-3 days.
- The needed changes are largely search-and replace type changes, and the
- alter_codeN modules can help.
- The modules have two functions which help the process:
-\end_layout
-
-\begin_layout Description
-convertfile (filename, orig=1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Convert the file with the given filename to use NumPy.
- If orig is True, then a backup is first made and given the name filename.orig.
- Then, the file is converted and the updated code written over the top of
- the old file.
-
-\end_layout
-
-\begin_layout Description
-convertall (direc=os.path.curdir, orig=1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Converts all the
-\begin_inset Quotes eld
-\end_inset
-
-.py
-\begin_inset Quotes erd
-\end_inset
-
- files in the given directory to use NumPy.
- Backups of all the files are first made if orig is True as explained for
- the convertfile function.
-
-\end_layout
-
-\begin_layout Description
-convertsrc (direc=os.path.curdir, ext=None, orig=1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Replace
-\family typewriter
-''Numeric/arrayobject.h
-\begin_inset Quotes erd
-\end_inset
-
-
-\family default
- with
-\family typewriter
-''numpy/oldnumeric.h
-\begin_inset Quotes erd
-\end_inset
-
-
-\family default
- in all files ending in the list of extensions given by ext (if ext is None,
- then all files are updated).
- If orig is True, then first make a backup file with
-\begin_inset Quotes eld
-\end_inset
-
-.orig
-\begin_inset Quotes erd
-\end_inset
-
- as the extension.
-\end_layout
-
-\begin_layout Description
-converttree (direc=os.path.curdir)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Walks the tree pointed to by direc and converts all
-\begin_inset Quotes eld
-\end_inset
-
-.py
-\begin_inset Quotes erd
-\end_inset
-
- modules in each sub-directory to use NumPy.
- No backups of the files are made.
- Also, converts all .h and .c files to replace
-\family typewriter
-''Numeric/arrayobject.h
-\begin_inset Quotes erd
-\end_inset
-
-
-\family default
- with
-\family typewriter
-''numpy/oldnumeric.h
-\begin_inset Quotes erd
-\end_inset
-
-
-\family default
- so that NumPy is used.
-
-\end_layout
-
-\begin_layout Subsection
-Changes to think about
-\end_layout
-
-\begin_layout Standard
-Even if you don't make changes to your old code.
- If you are used to coding in Numeric, then you may need to adjust your
- coding style a bit.
- This list provides some helpful things to remember.
-
-\end_layout
-
-\begin_layout Enumerate
-Switch from using typecode characters to bitwidth type names or c-type names
-
-\end_layout
-
-\begin_layout Enumerate
-Convert use of uppercase type-names Int32, Float, etc., to lower case int32,
- float, etc.
-\end_layout
-
-\begin_layout Enumerate
-Convert use of functions to method calls where appropriate but explicitly
- specify any axis arguments for arrays greater than 1-d.
-
-\end_layout
-
-\begin_layout Enumerate
-The names for standard computations like Fourier transforms, linear algebra,
- and random-number generation have changed to conform to the standard of
- lower-case names possibly separated by an underscore.
-\end_layout
-
-\begin_layout Enumerate
-Look for ways to take advantage of advanced slicing, but remember it always
- returns a copy and may be slower at times.
-\end_layout
-
-\begin_layout Enumerate
-Remove any kludges you inserted to eliminate problems with Numeric that
- are now gone.
-
-\end_layout
-
-\begin_layout Enumerate
-Look for ways to take advantage of new features like expanded data-types
- (record-arrays).
-
-\end_layout
-
-\begin_layout Enumerate
-See if you can inherit from the ndarray directly, rather than using user_array.co
-ntainer (UserArray).
- However, if you were using UserArray in a multiple-inheritance hierarchy
- this is going to be more difficult and you can continue to use the standard
- container class in user_array (but notice the name change).
-
-\end_layout
-
-\begin_layout Enumerate
-Watch your usage of scalars extracted from arrays.
- Treating Numeric arrays like lists and then doing math on the elements
- 1 by 1 was always about 2x slower than using real lists in Python.
- This can now be 3x-6x slower than using lists in NumPy because of the increased
- complexity of both the indexing of ndarrays and the math of array scalars.
- If you must select individual scalars from NumPy, you can get some speed
- increases by using the item method to get a standard Python scalar from
- an N-d array and by using the itemset method to place a scalar into a particula
-r location in the N-d array.
- This complicates the appearance of the code, however.
- Also, when using these methods inside a loop, be sure to assign the methods
- to a local variable to avoid the attribute look-up at each loop iteration.
-
-\end_layout
-
-\begin_layout Standard
-Throughout this book, warnings are inserted when compatibility issues with
- old Numeric are raised.
- While you may not need to make any changes to get code to run with the
- ndarray object, you will likely want to make changes to take advantage
- of the new features of NumPy.
- If you get into a jam during the conversion process, you should be aware
- that Numeric and NumPy can both be used together and they will not interfere
- with each other.
- In addition, if you have Numeric 24.0 or newer, they can even share the
- same memory.
- This makes it easy to use NumPy as well as third-party tools that have
- not made the switch from Numeric yet.
-\end_layout
-
-\begin_layout Section
-Summary of differences with Numarray
-\end_layout
-
-\begin_layout Standard
-Conversion from Numarray can also be relatively painless, depending on how
- dependent your code is on the specific structure of the Numarray ufuncs,
- cfuncs, and various array-like objects.
- The internals of Numarray can be quite different and so depending on how
- intimately you used those internals adapting to NumPy can be more or less
- difficult.
- C-code that used the Numarray C-API can be easily adapted because NumPy
- includes a Numarray-compatible C-API module.
- All you need to do is replace usage of
-\begin_inset Quotes eld
-\end_inset
-
-numarray/libnumarray.h
-\begin_inset Quotes erd
-\end_inset
-
- with
-\begin_inset Quotes eld
-\end_inset
-
-numpy/libnumarray.h
-\begin_inset Quotes erd
-\end_inset
-
- and be sure the directory returned from the Python command numpy.get_numarray_in
-clude() is included in the list of directories used for compilation.
-\end_layout
-
-\begin_layout Standard
-On the Python-side the largest number of differences are in the methods
- and attributes of the array and the way array data-types are represented.
- In addition, arrays containing Python Objects, strings, and records are
- an integral part of the array object and not handled using a separate class
- (although enhanced separate classes do exist for the case of character
- arrays and record arrays).
-
-\end_layout
-
-\begin_layout Standard
-As is the case with Numeric, there is a two-step process available for migrating
- code written for Numarray to work with NumPy.
- This process involves running functions in the modules alter_code1 and
- alter_code2 located in the numarray sub-package of NumPy.
- These modules have interfaces identical to the ones that convert Numeric
- code, but they work to convert code written for numarray.
- The first module will convert your code to use the numarray compatibility
- module (numpy.numarray), while the second will try and help convert code
- to move away from dependency on the compatibility module.
- Because many users will probably be content to only use the first step,
- the alter_code2 module for second-stage migration may not be as complete
- as it otherwise could be.
-
-\end_layout
-
-\begin_layout Standard
-Also, the alter_code1 module is not guaranteed to convert every piece of
- working numarray code to use NumPy.
- If your code relied on the internal module structure of numarray or on
- how the class hierarchy was laid out, then it will need to be changed manually
- to run with NumPy.
- Of course you can still use your code with Numarray installed side-by-side
- and the two array objects should be able to exchange data without copying.
-
-\end_layout
-
-\begin_layout Subsection
-First-step changes
-\end_layout
-
-\begin_layout Standard
-The alter_code1 script makes the following import and attribute/method changes
-\end_layout
-
-\begin_layout Subsubsection
-Import changes
-\end_layout
-
-\begin_layout Itemize
-import numarray --> import numpy.numarray as numarray
-\end_layout
-
-\begin_layout Itemize
-import numarray.package --> import numpy.numarray.package as numarray_package
- with all usages of numarray.package in the code replaced by numarray_package
-\end_layout
-
-\begin_layout Itemize
-import numarray as <name> --> import numpy.numarray s <name>
-\end_layout
-
-\begin_layout Itemize
-import numarray.package as <name> --> import numpy.numarray.package as <name>
-\end_layout
-
-\begin_layout Itemize
-from numarray import <names> --> from numpy.numarray import <names>
-\end_layout
-
-\begin_layout Itemize
-from numarray.package import <names> --> from numpy.numarray.package import
- <names>
-\end_layout
-
-\begin_layout Subsubsection
-Attribute and method changes
-\end_layout
-
-\begin_layout Itemize
-.imaginary --> .imag
-\end_layout
-
-\begin_layout Itemize
-.flat --> probably .ravel() (Many usages will still work correctly because
- you can index and assign to self.flat)
-\end_layout
-
-\begin_layout Itemize
-.byteswapped() --> .byteswap(False)
-\end_layout
-
-\begin_layout Itemize
-.byteswap() --> .byteswap(True) (Returns a reference to self instead of None).
-
-\end_layout
-
-\begin_layout Itemize
-self.info() --> numarray.info(self)
-\end_layout
-
-\begin_layout Itemize
-.isaligned() --> .flags.aligned
-\end_layout
-
-\begin_layout Itemize
-.isbyteswapped() --> not .dtype.isnative (the byte-order is a property of the
- data-type object not the array itself in NumPy).
-
-\end_layout
-
-\begin_layout Itemize
-.iscontiguous() --> .flags.c_contiguous
-\end_layout
-
-\begin_layout Itemize
-.is_c_array() --> .dtype.isnative and .flags.carray
-\end_layout
-
-\begin_layout Itemize
-.is_fortran_contiguous() --> .flags.f_contiguous
-\end_layout
-
-\begin_layout Itemize
-.is_f_array() --> .dtype.isnative and .flags.farray
-\end_layout
-
-\begin_layout Itemize
-.itemsize() --> .itemsize
-\end_layout
-
-\begin_layout Itemize
-.nelements() --> .size
-\end_layout
-
-\begin_layout Itemize
-self.new(type) --> numarray.newobj(self, type)
-\end_layout
-
-\begin_layout Itemize
-.repeat(r) --> .repeat(r, axis=0)
-\end_layout
-
-\begin_layout Itemize
-.size() --> .size
-\end_layout
-
-\begin_layout Itemize
-.type() --> numarray.typefrom(self)
-\end_layout
-
-\begin_layout Itemize
-.typecode() --> .dtype.char
-\end_layout
-
-\begin_layout Itemize
-.stddev() --> .std()
-\end_layout
-
-\begin_layout Itemize
-.togglebyteorder() --> numarray.togglebyteorder(self)
-\end_layout
-
-\begin_layout Itemize
-.getshape() --> .shape
-\end_layout
-
-\begin_layout Itemize
-.setshape(obj) --> .shape = obj
-\end_layout
-
-\begin_layout Itemize
-.getflat() --> .ravel()
-\end_layout
-
-\begin_layout Itemize
-.getreal() --> .real
-\end_layout
-
-\begin_layout Itemize
-.setreal(obj) --> .real = obj
-\end_layout
-
-\begin_layout Itemize
-.getimag() --> .imag
-\end_layout
-
-\begin_layout Itemize
-.setimag(obj) --> .imag = obj
-\end_layout
-
-\begin_layout Itemize
-.getimaginary() --> .imag
-\end_layout
-
-\begin_layout Itemize
-.setimaginary(obj) --> .imag = obj
-\end_layout
-
-\begin_layout Subsection
-Second-step changes
-\end_layout
-
-\begin_layout Standard
-One of the notable differences is that several functions (array, arange,
- fromfile, and fromstring) do not take the shape= keyword argument.
- Instead you simply reshape the result using the reshape method.
- Another notable difference is that instead of allowing typecode=, type=,
- and dtype= variants for specifying the data-types, you must use the dtype=
- keyword.
- Other differences include
-\end_layout
-
-\begin_layout Itemize
-matrixmultiply(a,b) --> dot(a,b)
-\end_layout
-
-\begin_layout Itemize
-innerproduct(a,b) --> inner(a,b)
-\end_layout
-
-\begin_layout Itemize
-outerproduct(a,b) --> outer(a,b)
-\end_layout
-
-\begin_layout Itemize
-kroneckerproduct(a,b) --> kron(a,b)
-\end_layout
-
-\begin_layout Itemize
-tensormultiply(a,b) --> None
-\end_layout
-
-\begin_layout Subsection
-Additional Extension modules
-\end_layout
-
-\begin_layout Standard
-There are three extension packages that come included with numarray which
- are now downloaded separately.
- Stubs for these packages exist in numpy.numarray but they try and find the
- actual code by looking at what is currently installed.
- These packages are available in SciPy but can be installed separately as
- well:
-\end_layout
-
-\begin_layout Itemize
-nd_image --> scipy.ndimage
-\end_layout
-
-\begin_layout Itemize
-convolve --> scipy.stsci.convolve
-\end_layout
-
-\begin_layout Itemize
-image --> scipy.stsci.image
-\end_layout
-
-\begin_layout Standard
-If you don't want to install all of scipy, you can grab just these packages
- from SVN using
-\end_layout
-
-\begin_layout LyX-Code
-svn co http://svn.scipy.org/svn/scipy/trunk/Lib/ndimage ndimage
-\end_layout
-
-\begin_layout LyX-Code
-svn co http://svn.scipy.org/svn/scipy/trunk/Lib/stsci stsci
-\end_layout
-
-\begin_layout Standard
-and then run
-\end_layout
-
-\begin_layout LyX-Code
-cd ndimage; sudo python setup.py install
-\end_layout
-
-\begin_layout LyX-Code
-cd stsci; sudo python setup.py install
-\end_layout
-
-\begin_layout Standard
-On a Windows system, you can use the Tortoise SVN client which is integrated
- into the Windows Explorer.
- It can be downloaded from http://tortoisesvn.tigris.org.
- Instructions on how to use it are also provided on that site.
- After downloading the packages from SVN, installation will still require
- a C-compiler (the mingw32 compiler works fine even with MSVC-compiled Python
- as long as you specify --compiler=mingw32).
- Alternatively you can download binary releases of scipy from http://www.scipy.org
- to get the needed functionality or use the Enthon edition of Python.
-\end_layout
-
-\begin_layout Chapter
-The Array Object
-\end_layout
-
-\begin_layout Quotation
-Don't worry about people stealing your ideas.
- If your ideas are any good, you'll have to ram them down people's throats.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Howard Aiken, IBM engineer
-\end_layout
-
-\begin_layout Quotation
-No idea is so antiquated that it was not once modern; no idea is so modern
- that it will not someday be antiquated.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Ellen Glasgow
-\end_layout
-
-\begin_layout Section
-
-\family typewriter
-ndarray
-\family default
- Attributes
-\end_layout
-
-\begin_layout Standard
-Array
-\begin_inset LatexCommand index
-name "ndarray|("
-
-\end_inset
-
- attributes reflect information that is intrinsic to the array itself.
- Generally, accessing an array through its attributes allows you to get
- and sometimes set intrinsic properties of the array without creating a
- new array.
- The exposed attributes are the core parts of an array and only some of
- them can be reset meaningfully without creating a new array.
- Table
-\begin_inset LatexCommand ref
-reference "cap:ndarray-attributes"
-
-\end_inset
-
- shows all the attributes
-\begin_inset LatexCommand index
-name "ndarray!attributes|("
-
-\end_inset
-
- with a brief description.
- Detailed information on each attribute is given below.
-\end_layout
-
-\begin_layout Warning
-Numeric Compatibility: you should check your old use of the .flat attribute.
- This attribute now returns an iterator object which acts like a 1-d array
- in terms of indexing.
- while it does not share all the attributes or methods of an array, it will
- be interpreted as an array in functions that take objects and convert them
- to arrays.
- Furthermore, Any changes in an array converted from a 1-d iterator will
- be reflected back in the original array when the converted array is deleted.
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset Float table
-wide false
-sideways false
-status open
-
-\begin_layout Standard
-\begin_inset Caption
-
-\begin_layout Standard
-\begin_inset LatexCommand label
-name "cap:ndarray-attributes"
-
-\end_inset
-
-Attributes of the
-\family typewriter
-ndarray
-\family default
-.
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset ERT
-status collapsed
-
-\begin_layout Standard
-
-
-\backslash
-vspace*{-0.2in}
-\backslash
-setlength{
-\backslash
-extrarowheight}{0.25eM}
-\end_layout
-
-\begin_layout Standard
-
-\end_layout
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\align center
-\begin_inset Tabular
-<lyxtabular version="3" rows="18" columns="3">
-<features>
-<column alignment="center" valignment="top" leftline="true" width="1in">
-<column alignment="center" valignment="top" leftline="true" width="1in">
-<column alignment="block" valignment="top" leftline="true" rightline="true" width="3in">
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family sans
-\series bold
-\size large
-Attribute
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family sans
-\series bold
-\size large
-Settable
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family sans
-\series bold
-\size large
-Description
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-flags
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-No
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-special array-connected dictionary-like object with attributes showing the
- state of flags in this array; only the flags WRITEABLE, ALIGNED, and UPDATEIFCO
-PY can be modified by setting attributes of this object
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-shape
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Yes
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-tuple showing the array shape; setting this attribute re-shapes the array
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-strides
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Yes
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-tuple showing how many
-\emph on
-bytes
-\emph default
- must be jumped in the data segment to get from one entry to the next
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-ndim
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-No
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-number of dimensions in array
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-data
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Yes
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-buffer object loosely wrapping the array data (only works for single-segment
- arrays)
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-size
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-No
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-total number of elements
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-itemsize
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-No
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-size (in bytes) of each element
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-nbytes
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-No
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-total number of bytes used
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-base
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-No
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-object this array is using for its data buffer, or None if it owns its own
- memory
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-dtype
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Yes
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-data-type object for this array
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-real
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Yes
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-real part of the array; setting copies data to real part of current array
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-imag
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Yes
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-imaginary part, or read-only zero array if type is not complex; setting
- works only if type is complex
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-flat
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Yes
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-one-dimensional, indexable iterator object that acts somewhat like a 1-d
- array
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-ctypes
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-No
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-object to simplify the interaction of this array with the ctypes module
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-__array_interface__
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-No
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-dictionary with keys (data, typestr, descr, shape, strides) for compliance
- with Python side of array protocol
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-__array_struct__
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-No
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-array interface on C-level
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-__array_priority__
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-No
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-always 0.0 for base type
-\family typewriter
-ndarray
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-Memory Layout attributes
-\end_layout
-
-\begin_layout Description
-flags
-\begin_inset LatexCommand index
-name "ndarray!attributes!flags"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Array flags
-\begin_inset LatexCommand index
-name "ndarray!flags|("
-
-\end_inset
-
- provide information about how the memory area used for the array is to
- be interpreted.
- There are 6 Boolean flags in use which govern whether or not:
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-C_CONTIGUOUS\InsetSpace ~
-(C) the data is in a single, C-style contiguous segment;
-\end_layout
-
-\begin_layout Description
-F_CONTIGUOUS\InsetSpace ~
-(F) the data is in a single, Fortran-style contiguous segment;
-\end_layout
-
-\begin_layout Description
-OWNDATA\InsetSpace ~
-(O) the array owns the memory it uses or if it borrows it from another
- object (if this is False, the base attribute retrieves a reference to the
- object this array obtained its data from);
-\end_layout
-
-\begin_layout Description
-WRITEABLE\InsetSpace ~
-(W) the data area can be written to;
-\end_layout
-
-\begin_layout Description
-ALIGNED\InsetSpace ~
-(A) the data and strides are aligned appropriately for the hardware
- (as determined by the compiler);
-\end_layout
-
-\begin_layout Description
-UPDATEIFCOPY\InsetSpace ~
-(U) this array is a copy of some other array (referenced by
-
-\family typewriter
-.base
-\family default
-).
- When this array is deallocated, the base array will be updated with the
- contents of this array.
-\end_layout
-
-\end_deeper
-\begin_layout Description
-\InsetSpace ~
- Only the
-\series bold
-UPDATEIFCOPY
-\series default
-,
-\series bold
-WRITEABLE
-\series default
-, and
-\series bold
-ALIGNED
-\series default
- flags can be changed by the user.
- This can be done using the special array-connected, dictionary-like object
- that the flags attribute returns.
- By setting elements in this dictionary, the underlying array obect's flags
- are altered.
- Flags can also be changed using the method
-\family typewriter
-setflags
-\family default
-(...).
- All flags in the dictionary can be accessed using their first (upper case)
- letter as well as the full name.
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Certain logical combinations of flags can also be read using named keys
- to the special flags dictionary.
- These combinations are
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-FNC Returns F_CONTIGUOUS and not C_CONTIGUOUS
-\end_layout
-
-\begin_layout Description
-FORC Returns F_CONTIGUOUS or C_CONTIGUOUS (one-segment test).
-\end_layout
-
-\begin_layout Description
-BEHAVED\InsetSpace ~
-(B) Returns ALIGNED and WRITEABLE
-\end_layout
-
-\begin_layout Description
-CARRAY\InsetSpace ~
-(CA) Returns BEHAVED and C_CONTIGUOUS
-\end_layout
-
-\begin_layout Description
-FARRAY_(FA) Returns BEHAVED and F_CONTIGUOUS and not C_CONTIGUOUS
-\end_layout
-
-\end_deeper
-\begin_layout Note
-The array flags cannot be set arbitrarily.
- UPDATEIFCOPY can only be set False.
- the ALIGNED flag can only be set True if the data is truly aligned.
- The flag WRITEABLE can only be set True if the array owns its own memory
- or the ultimate owner of the memory exposes a writeable buffer interface
- (or is a string).
- The exception for string is made so that unpickling can be done without
- copying memory.
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Flags can also be set and read using attribute access with the lower-case
- key equivalent (without first letter support).
- Thus, for example, self.flags.c_contiguous returns whether or not the array
- is C-style contiguous, and self.flags.writeable=True changes the array to
- be writeable (if possible)
-\begin_inset LatexCommand index
-name "ndarray!flags|)"
-
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Description
-shape
-\begin_inset LatexCommand index
-name "ndarray!attributes!shape"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The shape of the array is a tuple giving the number of elements in each
- dimension.
- The shape can be reset for single-segment arrays by setting this attribute
- to another tuple.
- The total number of elements cannot change.
- However, a -1 may be used in a dimension entry to indicate that the array
- length in that dimension should be computed so that the total number of
- elements does not change.
-
-\family typewriter
-a.shape=x
-\family default
- is equivalent to
-\family typewriter
-a=a.reshape(x)
-\family default
- except the latter can be used even if the array is not single-segment and
- even if
-\begin_inset Formula $a$
-\end_inset
-
- is an array scalar.
-
-\end_layout
-
-\begin_layout Note
-Setting the shape attribute to () for a 1-element array will turn self into
- a 0-dimensional array.
- This is one of the few ways to get a 0-dimensional array in Python.
- Most other operations will return an array scalar.
- Other ways to get a 0-dimensional array in Python include calling array
- with a scalar argument and calling the squeeze method of an array whose
- shape is all 1's.
-
-\end_layout
-
-\begin_layout Description
-strides
-\begin_inset LatexCommand index
-name "ndarray!attributes!strides"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The strides of an array is a tuple showing for each dimension how many
-
-\emph on
-bytes
-\emph default
- must be skipped to get to the next element in that dimension.
- Setting this attribute to another tuple will change the way the memory
- is viewed.
- This attribute can only be set to a tuple that will not cause the array
- to access unavailable memory.
- If an attempt is made to do so, ValueError is raised.
-\end_layout
-
-\begin_layout Description
-ndim
-\begin_inset LatexCommand index
-name "ndarray!attributes!ndim"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The number of dimensions of an array is sometimes called the rank of the
- array.
- Getting this attribute reveals the length of the shape tuple and the strides
- tuple.
-
-\end_layout
-
-\begin_layout Description
-data
-\begin_inset LatexCommand index
-name "ndarray!attributes!data"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A buffer object referencing the actual data for this array if this array
- is single-segment.
- If the array is not single-segment, then an AttributeError is raised.
- The buffer object is writeable depending on the status of self.flags.writeable.
-\end_layout
-
-\begin_layout Description
-size
-\begin_inset LatexCommand index
-name "ndarray!attributes!size"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The total number of elements in the array.
-\end_layout
-
-\begin_layout Description
-itemsize
-\begin_inset LatexCommand index
-name "ndarray!attributes!itemsize"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The number of bytes each element of the array requires.
-
-\end_layout
-
-\begin_layout Description
-nbytes
-\begin_inset LatexCommand index
-name "ndarray!attributes!nbytes"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The total number of bytes used by the array.
- This is equal to
-\family typewriter
-self.itemsize*self.size
-\family default
-.
-\end_layout
-
-\begin_layout Description
-base
-\begin_inset LatexCommand index
-name "ndarray!attributes!base"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- If the array does not own its own memory, then this attribute returns the
- object whose memory this array is referencing.
- The returned object may not be the original allocator of the memory, but
- may be borrowing it from still another object.
- If this array does own its own memory, then None is returned unless the
- UPDATEIFCOPY flag is True in which case self.base is the array that will
- be updated when self is deleted.
- UPDATEIFCOPY gets set for an array that is created as a behaved copy of
- a general array.
- The intent is for the misaligned array to get any changes that occur to
- the copy.
-
-\end_layout
-
-\begin_layout Subsection
-Data Type attributes
-\end_layout
-
-\begin_layout Standard
-There are several ways to specify the kind of data that the array is composed
- of.
- The fullest description that preserves field information is always obtained
- using an actual dtype object.
- See Chapter
-\begin_inset LatexCommand ref
-reference "cha:Data-descriptor-objects"
-
-\end_inset
-
- for more discussion on data-type objects and acceptable arguments to construct
- data-type objects.
- Three commonly-used attributes of the data-type object returned are also
- documented here.
-\end_layout
-
-\begin_layout Description
-dtype
-\begin_inset LatexCommand index
-name "ndarray!attributes!dtype"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A data-type object that fully describes (including any defined fields)
- each fixed-length item in the array.
- Whether or not the data is in machine byte-order is also determined by
- the data-type.
- The data-type attribute can be set to anything that can be interpreted
- as a data-type (see Chapter
-\begin_inset LatexCommand ref
-reference "cha:Data-descriptor-objects"
-
-\end_inset
-
- for more information).
- Setting this attribute allows you to change the interpretation of the data
- in the array.
- The new data-type must be compatible with the array's current data-type.
- The new data-type is compatible if it has the same itemsize as the current
- data-type descriptor, or (if the array is a single-segment array) if the
- the array with the new data-type fits in the memory already consumed by
- the array.
-
-\end_layout
-
-\begin_layout Description
-dtype.type
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A Python type object gives the typeobject whose instances represent elements
- of the array.
- This type object can be used to instantiate a scalar of that type.
-
-\end_layout
-
-\begin_layout Description
-dtype.char
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A typecode character unique to each of the 21 built-in types.
-
-\end_layout
-
-\begin_layout Description
-dtype.str
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This string consists of a required first character giving the
-\begin_inset Quotes eld
-\end_inset
-
-endianness
-\begin_inset Quotes erd
-\end_inset
-
- of the data (
-\begin_inset Quotes eld
-\end_inset
-
-<
-\begin_inset Quotes erd
-\end_inset
-
- for little endian,
-\begin_inset Quotes eld
-\end_inset
-
->
-\begin_inset Quotes erd
-\end_inset
-
- for big endian, and
-\begin_inset Quotes eld
-\end_inset
-
-|
-\begin_inset Quotes erd
-\end_inset
-
- for irrelevant), the second character is a code for the kind of data ('b'
- for Boolean, 'i' for signed integer, 'u' for unsigned integer, 'f' for
- floating-point, 'c' for complex floating point, 'O' for object, 'S' for
- ASCII string, 'U' for unicode, and 'V' for void), the final characters
- give the number of bytes each element uses.
-\end_layout
-
-\begin_layout Subsection
-Other attributes
-\end_layout
-
-\begin_layout Description
-T
-\begin_inset LatexCommand index
-name "ndarray!attributes!T"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to self.transpose().
- For self.ndim < 2, it returns a view of self.
-
-\end_layout
-
-\begin_layout Warning
-If arr is 0- or 1-dimensional, then arr.T will return a new ndarray which
- refers to the same data as arr.
- This is because transpose has the effect of reversing the shape attribute
- of an array (whose 0-d and 1-d equivalent is to return the same array).
- This may be surprising if you are thinking of your 1-d array as a
-\begin_inset Quotes eld
-\end_inset
-
-row
-\begin_inset Quotes erd
-\end_inset
-
- or a
-\begin_inset Quotes eld
-\end_inset
-
-column
-\begin_inset Quotes erd
-\end_inset
-
- vector and expected the .T attribute to return the other convention.
-
-\end_layout
-
-\begin_layout Description
-real
-\begin_inset LatexCommand index
-name "ndarray!attributes!real"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The real part of an array.
- For arrays that are not complex this attribute returns the array itself.
- Setting this attribute allows setting just the real part of an array.
- If the array is already real then setting this attribute is equivalent
- to self[...] = values.
-\end_layout
-
-\begin_layout Description
-imag
-\begin_inset LatexCommand index
-name "ndarray!attributes!imag"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A view of the imaginary part of an array.
- For arrays that are not complex, this returns a read-only array of zeros.
- Setting this array allows in-place alteration of the complex part of an
- imaginary array.
- If the array is not complex, then trying to set this attribute raises an
- Error.
-
-\end_layout
-
-\begin_layout Description
-flat
-\begin_inset LatexCommand index
-name "ndarray!attributes!flat"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an iterator object (numpy.flatiter) that acts like a 1-d version
- of the array.
- 1-d indexing works on this array and it can be passed in to most routines
- as an array wherein a 1-d array will be constructed from it.
- The new 1-d array will reference this array's data if this array is C-style
- contiguous, otherwise, new memory will be allocated for the 1-d array,
- the UPDATEIFCOPY flag will be set for the new array, and this array will
- have its WRITEABLE flag set FALSE until the the last reference to the new
- array disappears.
- When the last reference to the new 1-d array disappears, the data will
- be copied over to this non-contiguous array.
- This is done so that a.flat effectively references the current array regardless
- of whether or not it is contiguous or non-contiguous.
- As an example, consider the following code:
-\end_layout
-
-\begin_layout MyCode
->>> a = zeros((4,5))
-\newline
->>> b = ones(6)
-\newline
->>> add(b,b,a[1:3,0:3].flat)
-\newline
-array([[ 2.,
- 2., 2.],
-\newline
- [ 2., 2., 2.]])
-\newline
->>> print a
-\newline
-[[ 0.
- 0.
- 0.
- 0.
- 0.]
-\newline
- [ 2.
- 2.
- 2.
- 0.
- 0.]
-\newline
- [ 2.
- 2.
- 2.
- 0.
- 0.]
-\newline
- [ 0.
- 0.
- 0.
- 0.
- 0.]]
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The numpy.flatiter object has two methods:
-\series bold
-__array__()
-\series default
- and
-\series bold
-copy()
-\series default
- and one attribute:
-\series bold
-base
-\series default
-.
- The base attribute returns a reference to the underlying array.
-
-\end_layout
-
-\begin_layout Description
-__array_priority__
-\begin_inset LatexCommand index
-name "ndarray!attributes!\\_\\_array\\_priority\\_\\_"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The array priority attribute is a floating point number useful in mixed
- operations involving two subtypes to decide which subtype is returned.
- The base ndarray object has priority 0.0 and 1.0 is the default subtype priority.
-\end_layout
-
-\begin_layout Subsection
-Array Interface attributes
-\end_layout
-
-\begin_layout Standard
-The array interface
-\begin_inset LatexCommand index
-name "array interface"
-
-\end_inset
-
- (sometimes called array protocol) was created in 2005 as a means for array-like
- Python objects to re-use each other's data buffers intelligently whenever
- possible.
- The ndarray object supports both the Python-side and the C-side of the
- array interface.
- The system is able to consume objects that expose the array interface,
- and array objects can expose their inner workings to other objects that
- support the array interface.
-
-\end_layout
-
-\begin_layout Description
-__array_interface__
-\begin_inset LatexCommand index
-name "ndarray!attributes!\\_\\_array\\_interface\\_\\_"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The python-side of the array interface.
- It is a dictionary with the following attributes:
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-data A 2-tuple (dataptr, read-only flag).
- The dataptr is a string giving the address (in hexadecimal format) of the
- array data.
- The read-only flag is True if the array memory is read-only.
-
-\end_layout
-
-\begin_layout Description
-strides The strides tuple.
- Same as
-\series bold
-strides
-\series default
- attribute except None is returned if the array is C-style contiguous.
-\end_layout
-
-\begin_layout Description
-shape The shape tuple.
- Same as
-\series bold
-shape
-\series default
- attribute.
-\end_layout
-
-\begin_layout Description
-typestr A string giving the format of the data.
- Same as
-\series bold
-dtype.str
-\series default
- attribute.
-
-\end_layout
-
-\begin_layout Description
-descr A list of tuples providing the detailed description of this data type.
- This information is obtained from the arrdescr attribute of the dtypedescr
- object associated with each array.
- For arrays with fields, this will return a valid array-protocol descriptor
- list.
- For arrays without defined fields, this returns [('',typestr)].
-\end_layout
-
-\end_deeper
-\begin_layout Description
-__array_struct__
-\begin_inset LatexCommand index
-name "ndarray!attributes!\\_\\_array\\_struct\\_\\_"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A PyCObject that wraps a pointer to a PyArrayInterface structure.
- This is only useful on the C-level for rapid implementation of the array
- interface, using a single attribute lookup.
-\end_layout
-
-\begin_layout Description
-ctypes
-\begin_inset LatexCommand index
-name "ndarray!attributes!ctypes|("
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This attribute creates an object that makes it easier to use arrays when
- calling out to shared libraries with the ctypes module.
- The returned object has data, shape, and strides attributes which return
- ctypes
-\begin_inset LatexCommand index
-name "ctypes"
-
-\end_inset
-
- objects that can be used as arguments to a shared library.
- These attributes are:
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-data A pointer to the memory area of the array as a Python integer.
- This memory area may contain data that is not aligned, or not in correct
- byte-order.
- The memory area may not even be writeable.
- The array flags and data-type of this array should be respected when passing
- this attribute to arbitrary C-code to avoid trouble that can include Python
- crashing.
- User Beware! The value of this attribute is exactly the same as
-\family typewriter
-self.__array_interface__['data'][0]
-\family default
-.
-\end_layout
-
-\begin_layout Description
-shape (c_intp*self.ndim) A ctypes array of length self.ndim where the base-type
- is the C-integer corresponding to dtype('p') on this platform.
- This base-type could be c_int, c_long, or c_longlong depending on the platform.
- The c_intp type is defined accordingly in numpy.ctypeslib.
- The ctypes array contains the shape of the underlying array.
-\end_layout
-
-\begin_layout Description
-strides (c_intp*self.ndim) A ctypes array of length self.ndim where the base-type
- is the same as for the shape attribute.
- This ctypes array contains the strides information from the underlying
- array.
- This strides information is important for showing how many bytes must be
- jumped to get to the next element in the array.
-
-\end_layout
-
-\begin_layout Description
-_as_parameter_ (c_void_p) Returns the data-pointer to the array as a ctypes
- object.
- Among other possible uses, this enables this ctypes object to be used directly
- in a ctypes-loaded call to an arbitrary function.
- Be sure to respect the flags on the array and the size and strides of the
- array so as not to use this memory in-appropriately (see the
-\series bold
-ndpointer
-\series default
- function for how to return a class that can be used with the argtypes attribute
- of ctypes functions).
-
-\end_layout
-
-\end_deeper
-\begin_layout Warning
-Be careful using the ctypes attribute --- especially on temporary arrays
- or arrays constructed on the fly.
- For example, calling (a+b).ctypes.data_as(ctypes.c_void_p) returns a pointer
- to memory that is invalid because the array created as (a+b) is deallocated
- before the next Python statement.
- You can avoid this problem using either c=a+b or ct=(a+b).ctypes.
- In the latter case, ct will hold a reference to the array until ct is deleted
- or re-assigned.
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The ctypes object also has several methods which can alter how the shape,
- strides, and data of the underlying object is returned.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-data_as (obj) Return the data pointer cast-to a particular c-types object.
- For example, calling
-\family typewriter
-self._as_parameter_
-\family default
- is equivalent to
-\family typewriter
-self.data_as(ctypes.c_void_p)
-\family default
-.
- Perhaps you want to use the data as a pointer to a ctypes array of floating-poi
-nt data:
-\family typewriter
-self.data_as(ctypes.POINTER(ctypes.c_double))
-\family default
-.
-
-\end_layout
-
-\begin_layout Description
-shape_as (obj) Return the shape tuple as an array of some other c-types
- type.
- For example:
-\family typewriter
-self.shape_as(ctypes.c_short)
-\family default
-.
-
-\end_layout
-
-\begin_layout Description
-strides_as (obj) Return the strides tuple as an array of some other c-types
- type.
- For example:
-\family typewriter
-self.strides_as(ctypes.c_longlong)
-\family default
-.
-\end_layout
-
-\end_deeper
-\begin_layout Description
-\InsetSpace ~
- If the ctypes module is not available, then the ctypes attribute of array
- objects still returns something useful, but ctypes objects are not returned
- and errors may be raised instead.
- In particular, the object will still have the _as_parameter_ attribute
- which will return an integer equal to the data
-\begin_inset LatexCommand index
-name "ndarray!attributes!ctypes|)"
-
-\end_inset
-
- attribute
-\begin_inset LatexCommand index
-name "ndarray!attributes|)"
-
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Section
-
-\family typewriter
-ndarray
-\family default
- Methods
-\end_layout
-
-\begin_layout Standard
-In NumPy, the
-\family typewriter
-ndarray
-\family default
- object has many methods
-\begin_inset LatexCommand index
-name "ndarray!methods|("
-
-\end_inset
-
- which operate on or with the array in some fashion, typically returning
- an array result.
- In Numeric, many of these methods were only library calls.
- These methods are explained in this chapter.
- Whenever the array whose method is being called needs to be referenced
- it will be referred to as
-\emph on
-this array
-\emph default
-, or
-\emph on
-self
-\emph default
-.
- Keyword arguments will be shown.
- Methods that only take one argument do not have keyword arguments.
- Default values for one argument methods will be shown in braces {default}.
-
-\end_layout
-
-\begin_layout Warning
-If you are converting code from Numeric, then you will need to make the
- following (search and replace) conversions:
-\family typewriter
-.typecode() --> .dtype.char
-\family default
-;
-\family typewriter
-.iscontiguous() --> .flags.contiguous
-\family default
-;
-\family typewriter
-.byteswapped() --> .byteswap()
-\family default
-;
-\family typewriter
-.toscalar() --> .item()
-\family default
-; and
-\family typewriter
-.itemsize() --> .itemsize
-\family default
-.
- The numpy.oldnumeric.alter_code1 module can automate this for you.
-\end_layout
-
-\begin_layout Subsection
-Array conversion
-\end_layout
-
-\begin_layout Description
-tolist
-\begin_inset LatexCommand index
-name "ndarray!methods!tolist"
-
-\end_inset
-
- ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The contents of self as a nested list.
-\end_layout
-
-\begin_layout MyCode
->>> a = array([[1,2,3],[4,5,6]]); print a.tolist()
-\newline
-[[1, 2, 3], [4, 5, 6]]
-\end_layout
-
-\begin_layout Description
-item
-\begin_inset LatexCommand index
-name "ndarray!methods!item"
-
-\end_inset
-
- (*args)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- If no arguments are passed in, then this method only works for arrays with
- one element (a.size == 1).
- In this case, it returns a standard Python scalar object (if possible)
- copied from the first element of self.
- When the data type of self is longdouble or clongdouble, this returns a
- scalar array object because there is no available Python scalar that would
- not lose information.
- Void arrays return a buffer object for item() unless fields are defined
- in which case a tuple is returned.
-\end_layout
-
-\begin_layout MyCode
->>> asc = a[0,0].item()
-\newline
->>> type(asc)
-\newline
-<type 'int'>
-\newline
->>> asc
-\newline
-1
-\newline
->>> type(a[0,0])
-\newline
-<type
- 'numpy.int32'>
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- If arguments are provided, then they indicate indices into the array (either
- a flat index or an nd-index).
- A standard Python scalar corresponding to the item at the given location
- is then returned.
- This is very similar to self[args] except instead of an array scalar, a
- standard Python scalar is returned.
- This can be useful for speeding up access to elements of the array and
- doing arithmetic on elements of the array using Python's optimized math.
-
-\end_layout
-
-\begin_layout Description
-itemset
-\begin_inset LatexCommand index
-name "ndarray!methods!itemset"
-
-\end_inset
-
- (*args)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- There must be at least 1 argument and define the last argument as item.
- Then, this is equivalent to but faster than self[args] = item.
- The item should be a scalar value and args must select a single item in
- the array.
-\end_layout
-
-\begin_layout Description
-tostring
-\begin_inset LatexCommand index
-name "ndarray!methods!tostring"
-
-\end_inset
-
- (order='C')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A Python string showing a copy of the raw contents of data memory.
- The string can be produced in either 'C' or 'Fortran', or 'Any' order (the
- default is 'C'-order).
- 'Any' order means C-order unless the F_CONTIGUOUS flag in the array is
- set, then 'Fortran' order.
-
-\end_layout
-
-\begin_layout Description
-tofile
-\begin_inset LatexCommand index
-name "ndarray!methods!tofile"
-
-\end_inset
-
- (file=, sep='', format='')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Write the contents of self to the open file object.
- If file is a string, then open a file of that name first.
- If sep is the empty string, then write the file in binary mode.
- If sep is any other string, write the array in simple text mode separating
- each element with the value of the sep string.
- When the file is written in text mode, the format string can be used to
- alter the appearance of each entry.
- If format is the empty string, then it is equivalent to
-\family typewriter
-
-\begin_inset Quotes eld
-\end_inset
-
-%s
-\begin_inset Quotes erd
-\end_inset
-
-
-\family default
-.
- Each element of the array will be converted to a Python scalar,
-\family typewriter
-o
-\family default
-, and written to the file as
-\family typewriter
-
-\begin_inset Quotes eld
-\end_inset
-
-format
-\begin_inset Quotes erd
-\end_inset
-
- % o
-\family default
-.
- Note that writing an array to a file does not store any information about
- the shape, type, or endianness of an array.
- When written in binary mode, tofile is functionally equivalent to
-\family typewriter
-fid.write(self.tostring())
-\family default
-.
-\end_layout
-
-\begin_layout MyCode
->>> a.tofile('myfile.txt',sep=':',format='%03d')
-\end_layout
-
-\begin_layout MyCode
-Contents of myfile.txt
-\end_layout
-
-\begin_layout MyCode
-001:002:003:004:005:006
-\end_layout
-
-\begin_layout Description
-dump
-\begin_inset LatexCommand index
-name "ndarray!methods!dump"
-
-\end_inset
-
- (file)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Pickle the contents of self to the file object represented by file.
- Equivalent to cPickle.dump(self, file, 2)
-\end_layout
-
-\begin_layout Description
-dumps
-\begin_inset LatexCommand index
-name "ndarray!methods!dumps"
-
-\end_inset
-
- ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return pickled representation of self as a string.
- Equivalent to cPickle.dumps(self, 2)
-\end_layout
-
-\begin_layout Description
-astype
-\begin_inset LatexCommand index
-name "ndarray!methods!astype"
-
-\end_inset
-
- ({None})
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Force conversion of this array to an array with the data type provided
- as the argument.
- If the argument is None, or equal to the data type of self, then return
- a copy of the array.
-
-\end_layout
-
-\begin_layout Description
-byteswap
-\begin_inset LatexCommand index
-name "ndarray!methods!byteswap"
-
-\end_inset
-
- ({False})
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Byteswap the elements of the array and return the byteswapped array.
- If the argument is True, then byteswap in-place and return a reference
- to self.
- Otherwise, return a copy of the array with the elements byteswapped.
- The data-type descriptor is not changed so the array will have changed
- numbers.
-\end_layout
-
-\begin_layout Description
-copy
-\begin_inset LatexCommand index
-name "ndarray!methods!copy"
-
-\end_inset
-
- ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a copy of the array (which is always single-segment, and ALIGNED).
- However, the data-type is preserved (including whether or not the data
- is byteswapped).
-
-\end_layout
-
-\begin_layout Description
-view
-\begin_inset LatexCommand index
-name "ndarray!methods!view"
-
-\end_inset
-
- ({None})
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a new array using the same memory area as self.
- If the optional argument is given, it can be either a typeobject that is
- a sub-type of the ndarray or an object that can be converted to a data-type
- descriptor.
- If the argument is a typeobject then a new array of that Python type is
- returned that uses the information from self.
- If the argument is a data-type descriptor, then a new array of the same
- Python type as self is returned using the given data-type.
-
-\end_layout
-
-\begin_layout MyCode
->>> print a.view(single)
-\newline
-[[ 1.40129846e-45 2.80259693e-45 4.20389539e-45]
-\newline
-
- [ 5.60519386e-45 7.00649232e-45 8.40779079e-45]]
-\newline
->>> a.view(ubyte)
-\newline
-array([[1,
- 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0],
-\newline
- [4, 0, 0, 0, 5, 0, 0, 0, 6, 0,
- 0, 0]], dtype=uint8)
-\end_layout
-
-\begin_layout Description
-getfield
-\begin_inset LatexCommand index
-name "ndarray!methods!getfield"
-
-\end_inset
-
- (dtype=, offset=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a
-\emph on
-field
-\emph default
- of the given array as an array of the given data type.
- A field is a view of the array's data at a certain byte offset interpreted
- as a given data type.
- The returned array is a reference into self, therefore changes made to
- the returned array will be reflected in self.
- This method is particularly useful for record arrays that use a void data
- type, but it can also be used to extract the low (high)-order bytes of
- other array types as well.
- For example, using getfield, you could extract fixed-length substrings
- from an array of strings.
-
-\end_layout
-
-\begin_layout MyCode
->>> a = array(['Hello','World','NumPy'])
-\newline
->>> a.getfield('S2',1)
-\newline
-array(['el',
- 'or', 'um'],
-\newline
- dtype='|S2')
-\end_layout
-
-\begin_layout Description
-setflags
-\begin_inset LatexCommand index
-name "ndarray!methods!setflags"
-
-\end_inset
-
- (write=None, align=None, uic=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Set array flags WRITEABLE, ALIGNED, and UPDATEIFCOPY, respectively.
- The ALIGNED flag can only be set to True if the data is actually aligned
- according to the type.
- The UPDATEIFCOPY flag can never be set to True.
- The flag WRITEABLE can only be set True if the array owns its own memory
- or the ultimate owner of the memory exposes a writeable buffer interface
- (or is a string).
- The exception for string is made so that unpickling can be done without
- copying memory.
-
-\end_layout
-
-\begin_layout Description
-fill
-\begin_inset LatexCommand index
-name "ndarray!methods!fill"
-
-\end_inset
-
- (scalar)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Fill an array with the scalar value (appropriately converted to the type
- of self).
- If the scalar value is an array or a sequence, then only the first element
- is used.
- This method is usually faster than a[...]=scalar or self.flat=scalar, and always
- interprets its argument as a scalar.
-\end_layout
-
-\begin_layout Standard
-\begin_inset Float table
-wide false
-sideways false
-status open
-
-\begin_layout Standard
-\begin_inset Caption
-
-\begin_layout Standard
-Array conversion methods
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset ERT
-status collapsed
-
-\begin_layout Standard
-
-
-\backslash
-setlength{
-\backslash
-extrarowheight}{0.1eM}
-\end_layout
-
-\begin_layout Standard
-
-\end_layout
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\align center
-\begin_inset Tabular
-<lyxtabular version="3" rows="15" columns="3">
-<features>
-<column alignment="center" valignment="top" leftline="true" width="0">
-<column alignment="center" valignment="top" leftline="true" width="30text%">
-<column alignment="center" valignment="top" leftline="true" rightline="true" width="0">
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family sans
-\series bold
-\size large
-Method
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family sans
-\series bold
-\size large
-Arguments
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family sans
-\series bold
-\size large
-Description
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-astype
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(dtype {None})
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Cast to another data type
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-byteswap
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(inplace {False})
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Byteswap array elements
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-copy
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-()
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Copy array
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-dump
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(file)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Pickle to stream or file
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-dumps
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-()
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Get pickled string
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-fill
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(scalar)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Fill an array with scalar value
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-getfield
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(dtype=, offset=0)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Return a field of the array
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-setflags
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(write=None, align=None, uic=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Set array flags
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-tofile
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(file=, sep='', format='')
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Raw write to file
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-tolist
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-()
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Array as a nested list
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-item
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(*args)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Python scalar extraction
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-itemset
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(*args)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Insert scalar (last argument) into array
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-tostring
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(order='C')
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-String of raw memory
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-view
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(obj)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-View as another data type or class
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-Array shape manipulation
-\end_layout
-
-\begin_layout Standard
-For reshape, resize, and transpose, the single tuple argument may be replaced
- with
-\begin_inset Formula $n$
-\end_inset
-
- integers which will be interpreted as an
-\begin_inset Formula $n$
-\end_inset
-
--tuple.
-\end_layout
-
-\begin_layout Description
-reshape
-\begin_inset LatexCommand index
-name "ndarray!methods!reshape"
-
-\end_inset
-
- (newshape, order='C')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an array that uses the same data as this array but has a new shape
- given by the newshape tuple (or a scalar to reshape as 1-d).
- The new shape must define an array with the same total number of elements.
- If one of the elements of the new shape tuple is -1, then that dimension
- will be determined such that the overall number of items in the array stays
- constant.
- If possible, the new array will reference the data of the old one.
- If the data must be moved in order to accomplish the reshape, then then
- the new array will contain a copy of the data in self.
- The order argument specifies how the array data should be viewed during
- the reshape (either in 'C' or 'FORTRAN' order).
- This order argument specifies both how the intrinsic raveling to a 1-d
- array should occur as well as how that 1-d array should be used to fill-up
- the new output array.
-
-\end_layout
-
-\begin_layout Description
-resize
-\begin_inset LatexCommand index
-name "ndarray!methods!resize"
-
-\end_inset
-
- (newshape, refcheck=1, order='C')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Resize an array in-place.
- This changes self (in-place) to be an array with the new shape, reallocating
- space for the data area if necessary.
- If the data memory must be changed because the number of new elements is
- different than self.size, then an error will occur if this array does not
- own its data or if another object is referencing this one.
- Only a single-segment array can be resized.
- The method returns None.
- To bypass the reference count check, then set refcheck=0.
- The purpose of the reference count check is to make sure you don't use
- this array as a buffer for another Python object and then reallocate the
- memory.
- However, reference counts can increase in other ways so if you are sure
- that you have not shared the memory for this array to another Python object,
- then you may safely set refcheck=0.
-
-\end_layout
-
-\begin_layout Description
-transpose
-\begin_inset LatexCommand index
-name "ndarray!methods!transpose"
-
-\end_inset
-
- (<None>)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an array view with the shape transposed according to the argument.
- An argument of None is equivalent to range(self.ndim)[::-1].
- The argument can either be a tuple or multiple integer arguments.
- This method returns a new array with permuted shape and strides attributes
- using the same data as self.
-
-\end_layout
-
-\begin_layout MyCode
->>> a = arange(40).reshape((2,4,5))
-\newline
->>> b = a.transpose(2,0,1)
-\newline
->>> print a.shape,
- b.shape
-\newline
-(2, 4, 5) (5, 2, 4)
-\newline
->>> print a.strides, b.strides
-\newline
-(80, 20, 4) (4, 80,
- 20)
-\newline
->>> print a
-\newline
-[[[ 0 1 2 3 4]
-\newline
- [ 5 6 7 8 9]
-\newline
- [10 11 12 13 14]
-\newline
- [15
- 16 17 18 19]]
-\newline
-
-\newline
- [[20 21 22 23 24]
-\newline
- [25 26 27 28 29]
-\newline
- [30 31 32 33 34]
-\newline
- [35
- 36 37 38 39]]]
-\newline
->>> print b
-\newline
-[[[ 0 5 10 15]
-\newline
- [20 25 30 35]]
-\newline
-
-\newline
- [[ 1 6 11 16]
-\newline
-
- [21 26 31 36]]
-\newline
-
-\newline
- [[ 2 7 12 17]
-\newline
- [22 27 32 37]]
-\newline
-
-\newline
- [[ 3 8 13 18]
-\newline
- [23 28 33
- 38]]
-\newline
-
-\newline
- [[ 4 9 14 19]
-\newline
- [24 29 34 39]]]
-\end_layout
-
-\begin_layout Description
-swapaxes
-\begin_inset LatexCommand index
-name "ndarray!methods!swapaxes"
-
-\end_inset
-
- (axis1, axis2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an array view with axis1 and axis2 swapped.
- This is a special case of the transpose method with argument equal to arg=range
-(self.ndim); arg[axis1], arg[axis2] = arg[axis2], arg[axis1].
- See the
-\series bold
-rollaxis
-\series default
- function for a routine that transposes the array with the axes rolled instead
- of swapped.
-
-\end_layout
-
-\begin_layout Description
-flatten
-\begin_inset LatexCommand index
-name "ndarray!methods!flatten"
-
-\end_inset
-
- (order='C')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a new 1-d array with data copied from self.
- Equivalent to but slightly faster then a.flat.copy().
-
-\end_layout
-
-\begin_layout Description
-ravel
-\begin_inset LatexCommand index
-name "ndarray!methods!ravel"
-
-\end_inset
-
- (order='C')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a 1-d version of self.
- If self is single-segment, then the new array references self, otherwise,
- a copy is made.
-\end_layout
-
-\begin_layout Description
-squeeze
-\begin_inset LatexCommand index
-name "ndarray!methods!squeeze"
-
-\end_inset
-
- ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an array with all unit-length dimensions squeezed out.
-\end_layout
-
-\begin_layout Subsection
-Array item selection and manipulation
-\end_layout
-
-\begin_layout Standard
-For array methods that take an axis keyword, it defaults to None.
- If axis is None, then the array is treated as a 1-D array.
- Any other value for axis represents the dimension along which the operation
- should proceed.
-
-\end_layout
-
-\begin_layout Description
-take
-\begin_inset LatexCommand index
-name "ndarray!methods!take"
-
-\end_inset
-
- (indices=, axis=None, out=None, mode='raise')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The functionality of this method is available using the advanced indexing
- ability of the
-\family typewriter
-ndarray
-\family default
- object.
- However, for doing selection along a single axis it is usually faster to
- use take.
- If axis is not None, this method is equivalent to
-\family typewriter
-self[indxobj]
-\family default
- preceeded by
-\family typewriter
-indxobj=[slice(None)]*self.ndim; indxobj[
-\series bold
-axis
-\series default
-] =
-\family default
-
-\family typewriter
-\series bold
-indices
-\family default
-\series default
-.
- It returns the elements or sub-arrays from self indicated by the index
- numbers in indices.
- If axis is None, then this method is equivalent to
-\family typewriter
-self.flat[indices]
-\family default
-.
- The out and mode arguments allow for specification of the output array
- and how out-of-bounds indices will be handled ('raise': raise an error,
- 'wrap': wrap around, 'clip': clip to range)
-\end_layout
-
-\begin_layout Description
-put
-\begin_inset LatexCommand index
-name "ndarray!methods!put"
-
-\end_inset
-
- (indices=, values=, mode='raise')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Performs the equivalent of
-\end_layout
-
-\begin_layout LyX-Code
-for n in
-\series bold
-indices
-\series default
-:
-\end_layout
-
-\begin_layout LyX-Code
- self.flat[n] =
-\series bold
-values
-\series default
-[n]
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Values is repeated if it is too short.
- The mode argument specifies what to do if n is too large.
-
-\end_layout
-
-\begin_layout Description
-repeat
-\begin_inset LatexCommand index
-name "ndarray!methods!repeat"
-
-\end_inset
-
- (repeats=, axis=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Copy elements (or sub-arrays selected along axis) of self
-\series bold
-repeats
-\series default
- times.
- The repeats argument must be a sequence of length self.shape[axis] or a
- scalar.
- The repeats argument dictates how many times the element (or sub-array)
- will be repeated in the result array.
-
-\end_layout
-
-\begin_layout Description
-choose
-\begin_inset LatexCommand index
-name "ndarray!methods!choose"
-
-\end_inset
-
- (choices, out=None, mode='raise')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The array must be an integer (or bool) array with entries from
-\begin_inset Formula $0$
-\end_inset
-
- to
-\begin_inset Formula $n$
-\end_inset
-
-.
- Choices is a tuple of
-\begin_inset Formula $n$
-\end_inset
-
- choice arrays:
-\begin_inset Formula $b0,\, b1,\,\ldots\,,\, bn$
-\end_inset
-
-.
- (Alternatively, choices can be replaced with
-\begin_inset Formula $n$
-\end_inset
-
- arguments where each argument is a choice array).
- The return array will be formed from the elements of the choice arrays
- according to the value of the elements of self.
- In other words, the output array will merge the choice arrays together
- by using the value of self at a particular position to select which choice
- array should be used for the output at a particular position.
- The out keyword allows specification of an output array and the clip keyword
- allows different behavior when self contains entries outside the number
- of choices.
- The acceptable arguments to mode are 'raise' (RAISE), 'wrap' (WRAP), and
- 'clip' (CLIP) ('raise' produces an error, 'wrap' converts the number into
- range by periodic wrapping so that numbers <0 have
-\begin_inset Formula $n$
-\end_inset
-
- repeatedly added and numbers >=
-\begin_inset Formula $n$
-\end_inset
-
- have
-\begin_inset Formula $n$
-\end_inset
-
- repeatedly subtracted, and 'clip' will clip all entries to be within the
- range [0,
-\begin_inset Formula $n$
-\end_inset
-
-).
-\end_layout
-
-\begin_layout MyCode
->>> a = array([0,3,2,1])
-\newline
->>> a.choose([0,1,2,3],[10,11,12,13],
-\newline
-...
- [20,21,22,23],[30,31,32,33])
-\newline
-array([ 0, 31, 22, 13])
-\end_layout
-
-\begin_layout Description
-sort
-\begin_inset LatexCommand index
-name "ndarray!methods!sort"
-
-\end_inset
-
- (axis=-1, kind='quick', order=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Sort the array in-place and return None.
- The sort takes place over the given axis using an underlying sort algorithm
- specified by kind.
- The sorting algorithms available are 'quick', 'heap', and 'merge'.
- For flexible types only the quicksort algorithm is available.
- For arrays with fields defined, the order keyword allows specification
- of the order in which to use the field names in the sort.
- If order is a string then it is the field name to use to define the sort.
- If order is a list (or tuple) of strings, then it specifies a lexicographic
- ordering so that the first listed field name is compared first if that
- results in equality, the second listed field name is used for the comparison
- and so on.
- If order is None, then arrays with fields use the first field for comparison.
-
-\end_layout
-
-\begin_layout MyCode
->>> a=array([[0.2,1.3,2.5],[1.5,0.1,1.4]]);
-\newline
->>> b=a.copy(); b.sort(0); print b
-\newline
-[[
- 0.2 0.1 1.4]
-\newline
- [ 1.5 1.3 2.5]]
-\newline
->>> b=a.copy(); b.sort(1); print b
-\newline
-[[ 0.2 1.3 2.5]
-\newline
-
- [ 0.1 1.4 1.5]]
-\end_layout
-
-\begin_layout Description
-argsort
-\begin_inset LatexCommand index
-name "ndarray!methods!argsort"
-
-\end_inset
-
- (axis=-1, kind='quick', order=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an index array of the same size as self showing which indices along
- the given axis should be selected to sort self along that axis.
- Uses an underlying sort algorithm specified by kind.
- The sorting algorithms available are 'quick', 'heap', and 'merge'.
- For arrays with fields defined, the order keyword allows specification
- of the order in which to use the field names in the sort.
- If order is a string then it is the field name to use to define the sort.
- If order is a list (or tuple) of strings, then it specifies a lexicographic
- ordering so that the first listed field name is compared first if that
- results in equality, the second listed field name is used for the comparison
- and so on.
- If order is None, then arrays with fields use the first field for comparison.
-
-\end_layout
-
-\begin_layout MyCode
->>> b=a.copy(); print b.argsort(0)
-\newline
-[[0 1 1]
-\newline
- [1 0 0]]
-\newline
->>> b=a.copy(); print b.argsort(1
-)
-\newline
-[[0 1 2]
-\newline
- [1 2 0]]
-\end_layout
-
-\begin_layout Tip
-Complex valued arrays sort lexicographically by comparing first the real
- parts and then the imaginary parts if the real parts are the same.
-\end_layout
-
-\begin_layout Description
-searchsorted
-\begin_inset LatexCommand index
-name "ndarray!methods!searchsorted"
-
-\end_inset
-
- (values, side='left')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an index array (dtype=intp) of the same shape as values showing
- the index where the value would fit in self.
- The index is such that self[index-1]
-\begin_inset Formula $<$
-\end_inset
-
- value
-\begin_inset Formula $\le$
-\end_inset
-
- self[index] when side is 'left'.
- In this formula self[self.size]=
-\begin_inset Formula $\infty$
-\end_inset
-
- and self[-1]=
-\begin_inset Formula $-\infty$
-\end_inset
-
-.
- Therefore, if value is larger than all elements of self, then index is
- self.size.
- If value is smaller than all elements of self, then index is 0.
- Self must be a sorted 1-d array.
- If elements of self are repeated, the index of the first occurrence is
- used.
- If side is 'right', then the search rule is switched so that the
-\begin_inset Formula $<$
-\end_inset
-
- sign is on the
-\begin_inset Quotes eld
-\end_inset
-
-right
-\begin_inset Quotes erd
-\end_inset
-
- instead of the left in the search rule.
- In other words, the index returned is such that self[index-1]
-\begin_inset Formula $\le$
-\end_inset
-
-value
-\begin_inset Formula $<$
-\end_inset
-
- self[index].
-\end_layout
-
-\begin_layout MyCode
->>> b=a.ravel(); b.sort()
-\newline
->>> b.searchsorted([0.0, 1.35, 2.0, 3.0])
-\newline
-array([0, 3,
- 5, 6])
-\end_layout
-
-\begin_layout Description
-nonzero
-\begin_inset LatexCommand index
-name "ndarray!methods!nonzero"
-
-\end_inset
-
- ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the
-\begin_inset Formula $n$
-\end_inset
-
--dimensional indices for elements of the
-\begin_inset Formula $n$
-\end_inset
-
--dimensional array self that are nonzero into an
-\begin_inset Formula $n$
-\end_inset
-
--tuple of equal-length index arrays.
- In particular, notice that a 0-dimensional array always returns an empty
- tuple.
-
-\end_layout
-
-\begin_layout MyCode
->>> x = arange(15); y=x.reshape(3,5)
-\newline
->>> (x>8).nonzero()
-\newline
-(array([ 9, 10, 11,
- 12, 13, 14]),)
-\newline
->>> (y>8).nonzero()
-\newline
-(array([1, 2, 2, 2, 2, 2]), array([4, 0,
- 1, 2, 3, 4]))
-\end_layout
-
-\begin_layout Description
-compress
-\begin_inset LatexCommand index
-name "ndarray!methods!compress"
-
-\end_inset
-
- (condition=, axis=None, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This method expects condition to be a one-dimensional mask array of the
- same length as self.shape[axis].
- If the array is less than self.shape[axis], then False is assumed for the
- missing elements.
- The method returns the elements (or sub-arrays along the given axis) of
- self where condition is true.
- The shape of the return array is self.shape with the axis dimension replaced
- by the number of True elements of condition.
- The same effect can often be accomplished using array indexing.
-\end_layout
-
-\begin_layout MyCode
->>> x=array([0,1,2,3])
-\newline
->>> x.compress(x > 2)
-\newline
-array([3])
-\newline
->>> x[x>2]
-\newline
-array([3])
-\end_layout
-
-\begin_layout Description
-diagonal
-\begin_inset LatexCommand index
-name "ndarray!methods!diagonal"
-
-\end_inset
-
- (offset=0, axis1=0, axis2=1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- If self is 2-d, return the
-\series bold
-offset
-\series default
- (from the main diagonal) diagonal of self.
- If self is larger than 2-d, then return an array constructed from all the
- diagonals created from all the 2-d sub-arrays formed using all of axis1
- and axis2.
- The offset parameter is with respect to axis2.
- The shape of the returned array is found by removing the axis1 and axis2
- entries from self.shape and then appending the length of the offset diagonal
- of each 2-d sub-array.
-\end_layout
-
-\begin_layout MyCode
->>> a=arange(25).reshape(5,5); print a
-\newline
-[[ 0 1 2 3 4]
-\newline
- [ 5 6 7 8 9]
-\newline
-
- [10 11 12 13 14]
-\newline
- [15 16 17 18 19]
-\newline
- [20 21 22 23 24]]
-\newline
->>> print a.diagonal()
-\newline
-[
- 0 6 12 18 24]
-\newline
->>> print a.diagonal(1)
-\newline
-[ 1 7 13 19]
-\newline
->>> print a.diagonal(-1)
-\newline
-[
- 5 11 17 23]
-\end_layout
-
-\begin_layout Standard
-\begin_inset Float table
-wide false
-sideways false
-status open
-
-\begin_layout Standard
-\begin_inset Caption
-
-\begin_layout Standard
-Array item selection and shape manipulation methods.
- If axis is an argument, then the calculation is performed along that axis.
- An axis value of None means the array is flattened before calculation proceeds.
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset ERT
-status collapsed
-
-\begin_layout Standard
-
-
-\backslash
-setlength{
-\backslash
-extrarowheight}{0.25eM}
-\end_layout
-
-\begin_layout Standard
-
-\end_layout
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\align center
-\begin_inset Tabular
-<lyxtabular version="3" rows="18" columns="3">
-<features>
-<column alignment="center" valignment="top" leftline="true" width="0">
-<column alignment="center" valignment="top" leftline="true" width="50text%">
-<column alignment="block" valignment="top" leftline="true" rightline="true" width="30text%">
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family sans
-\series bold
-\size large
-Method
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family sans
-\series bold
-\size large
-Arguments
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family sans
-\series bold
-\size large
-Description
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-argsort
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-argsort (axis=None, kind='quick')
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Indices showing how to sort array.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-choose
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-choose (c0, c1 , ..., cn, out=None, clip='raise')
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Choose from different arrays based on value of self.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-compress
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(condition=, axis=None, out=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Elements of self where condition is true.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-diagonal
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(offset=0, axis1=0, axis2=1)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Return a diagonal from self.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-flatten
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(order='C')
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-A 1-d copy of self.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-nonzero
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-()
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-True where self is not zero.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-put
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(indices=, values=, mode='raise')
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Place values at 1-d index locations of self.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-ravel
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(order='C')
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-1-d version of self (no data copy if self is C-style contiguous).
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-repeat
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(repeats=, axis=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Repeat elements of self.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-reshape
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(d1,d2,...,dn, order='C')
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Return reshaped version of self.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-resize
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(d1,d2,...,dn, refcheck=1, order='Any')
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Resize self in-place.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-searchsorted
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(values)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Show where values would be placed in self (assumed sorted).
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-sort
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(axis=None, kind='quick')
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Copy of self sorted along axis.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-squeeze
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-()
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Squeeze out all length-1 dimensions.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-swapaxes
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(axis1, axis2)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Swap two dimensions of self.
-
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-take
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(indices=, axis=None, out=None, mode='raise')
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Select elements of self along axis according to indices.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-transpose
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(permute <None>)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Rearrange shape of self according to permute.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-Array calculation
-\end_layout
-
-\begin_layout Standard
-Many of these methods take an argument named axis.
- In such cases, if axis is None (the default), the array is treated as a
- 1-d array and the operation is performed over the entire array.
- This behavior is also the default if self is a 0-dimensional array or array
- scalar.
- If axis is an integer, then the operation is done over the given axis (for
- each 1-d subarray that can be created along the given axis).
- The parameter dtype specifies the data type over which a reduction operation
- (like summing) should take place.
- The default reduce data type is the same as the data type of self.
- To avoid overflow, it can be useful to perform the reduction using a larger
- data type.
- For several methods, an optional out argument can be provided and the result
- will be placed into the output array given.
- The out argument must be an ndarray and have the same number of elements.
- It can be of a different type in which case casting will be performed.
-
-\end_layout
-
-\begin_layout Description
-max
-\begin_inset LatexCommand index
-name "ndarray!methods!max"
-
-\end_inset
-
- (axis=None, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the largest value in self.
- This is a better way to compute the maximum over an array, than using max(self).
- The latter uses the generic sequence interface to self.
- This will be slower, and will try to get an answer by comparing whole sub-array
-s of self.
- This will be incorrect for arrays larger than 1-d.
-\end_layout
-
-\begin_layout Description
-argmax
-\begin_inset LatexCommand index
-name "ndarray!methods!argmax"
-
-\end_inset
-
- (axis=None, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the (first, 1-d) index of the largest value in self.
-\end_layout
-
-\begin_layout Description
-min
-\begin_inset LatexCommand index
-name "ndarray!methods!min"
-
-\end_inset
-
- (axis=None, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the smallest value in self.
- This is a better way to compute the minimum over an array, than using min(self).
- The latter uses the generic sequence interface to self.
- This will be slower, and will try to get an answer by comparing whole sub-array
-s of self.
- This will be incorrect for arrays larger than 1-d.
-\end_layout
-
-\begin_layout Description
-argmin
-\begin_inset LatexCommand index
-name "ndarray!methods!argmin"
-
-\end_inset
-
- (axis=None, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the (first, 1-d) index of the smallest value in self.
-\end_layout
-
-\begin_layout Description
-ptp
-\begin_inset LatexCommand index
-name "ndarray!methods!ptp"
-
-\end_inset
-
- (axis=None, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the difference of the largest to the smallest value in self.
- Equivalent to self.max(axis) - self.min(axis)
-\end_layout
-
-\begin_layout Description
-clip
-\begin_inset LatexCommand index
-name "ndarray!methods!clip"
-
-\end_inset
-
- (min=,max=, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a new array where any element in self less than min is set to min
- and any element less than max is set to max.
- Equivalent to self[self<min]=min; self[self>max]=max.
-\end_layout
-
-\begin_layout Description
-conj
-\begin_inset LatexCommand index
-name "ndarray!methods!conj"
-
-\end_inset
-
- (out=None)
-\end_layout
-
-\begin_layout Description
-conjugate
-\begin_inset LatexCommand index
-name "ndarray!methods!conjugate"
-
-\end_inset
-
- (out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the conjugate of elements of the array.
-\end_layout
-
-\begin_layout Description
-round
-\begin_inset LatexCommand index
-name "ndarray!methods!round"
-
-\end_inset
-
- (decimals=0, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Round the elements of the array to the nearest decimal.
- For decimals < 0, the rounding is done to the nearest tens, hundreds, etc.
- Rounding of exactly the half-interval is to the nearest even integer.
- This is the only difference with standard Python rounding.
-\end_layout
-
-\begin_layout Description
-trace
-\begin_inset LatexCommand index
-name "ndarray!methods!trace"
-
-\end_inset
-
- (offset=0, axis1=0, axis2=1, dtype=None, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Perform a summation along each diagonal specified by offset, axis1, and
- axis2.
- Equivalent to diagonal(offset,axis1,axis2).sum(axis=-1, dtype=dtype)
-\end_layout
-
-\begin_layout Description
-sum
-\begin_inset LatexCommand index
-name "ndarray!methods!sum"
-
-\end_inset
-
- (axis=None, dtype=None, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the sum
-\begin_inset Formula \[
-\sum_{i=0}^{N-1}\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i]\]
-
-\end_inset
-
- where axis ':' objects are placed before the
-\begin_inset Formula $i.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-cumsum
-\begin_inset LatexCommand index
-name "ndarray!methods!cumsum"
-
-\end_inset
-
- (axis=None, dtype=None, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the cumulative sum.
- If ret is the return array of the same shape as
-\begin_inset Formula $\textrm{self},$
-\end_inset
-
- then
-\begin_inset Formula \[
-\textrm{ret}[\underbrace{:,\ldots,:}_{\textrm{axis}},j]=\sum_{i=0}^{j}\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i].\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-mean
-\begin_inset LatexCommand index
-name "ndarray!methods!mean"
-
-\end_inset
-
- (axis=None, dtype=None, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the average value caculated as
-\begin_inset Formula \[
-\frac{1}{N}\sum_{i=0}^{N-1}\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i]\]
-
-\end_inset
-
- where
-\begin_inset Formula $N$
-\end_inset
-
- is self.shape[axis] and axis ':' objects are placed before the
-\begin_inset Formula $i.$
-\end_inset
-
- The sum is done in the data-type of self unless self is an integer or Boolean
- data-type and then it is done over the float data-type.
-
-\end_layout
-
-\begin_layout Description
-var
-\begin_inset LatexCommand index
-name "ndarray!methods!var"
-
-\end_inset
-
- (axis=None, dtype=None, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the variance of the data calculated as
-\begin_inset Formula \[
-\frac{1}{N}\sum_{i=0}^{N-1}\left(\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i]-\mu\right)^{2}\]
-
-\end_inset
-
- where
-\begin_inset Formula $N$
-\end_inset
-
- is self.shape[axis] and
-\begin_inset Formula $\mu$
-\end_inset
-
- is the mean (restored to the same number of dimensions as self with
-\begin_inset Formula $\mu$
-\end_inset
-
- copied along the axis dimension).
- This is equivalent to (self**2).mean - self.mean()**2 and ((self-self.mean())**2).m
-ean().
- The value of
-\begin_inset Formula $N-1$
-\end_inset
-
- was not chosen for normalization because while it gives an
-\begin_inset Quotes eld
-\end_inset
-
-unbiased
-\begin_inset Quotes erd
-\end_inset
-
- estimate, it is not always prudent to return unbiased estimates as they
- may have larger mean-square error.
- The sum is done using a float data-type if self has integer or Boolean
- data-type, otherwise it is done using the same data-type as self.
-
-\end_layout
-
-\begin_layout Description
-std
-\begin_inset LatexCommand index
-name "ndarray!methods!std"
-
-\end_inset
-
- (axis=None, dtype=None, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the standard deviation calculated as
-\begin_inset Formula \[
-\sqrt{\frac{1}{N}\sum_{i=0}^{N-1}\left(\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i]-\mu\right)^{2}}\]
-
-\end_inset
-
- where
-\begin_inset Formula $N$
-\end_inset
-
- is self.shape[axis] and
-\begin_inset Formula $\mu$
-\end_inset
-
- is the mean (restored to the same number of dimensions as self with
-\begin_inset Formula $\mu$
-\end_inset
-
- copied along the axis dimension).
- The sum is done using the same data-type as self unless self is an integer
- or Boolean data-type and then it is done using a float data-type.
-
-\end_layout
-
-\begin_layout Description
-prod
-\begin_inset LatexCommand index
-name "ndarray!methods!prod"
-
-\end_inset
-
- (axis=None, dtype=None, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the product calculated as
-\begin_inset Formula \[
-\prod_{i=0}^{N-1}\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i].\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-cumprod
-\begin_inset LatexCommand index
-name "ndarray!methods!cumprod"
-
-\end_inset
-
- (axis=None, dtype=None, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the cumulative product so that the return array, ret, is the same
- shape as self and
-\begin_inset Formula \[
-\textrm{ret}[\underbrace{:,\ldots,:}_{\textrm{axis}},j]=\prod_{i=0}^{j}\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i].\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-all
-\begin_inset LatexCommand index
-name "ndarray!methods!all"
-
-\end_inset
-
- (axis=None, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return True if all entries along axis evaluate True, otherwise return False.
-\end_layout
-
-\begin_layout Description
-any
-\begin_inset LatexCommand index
-name "ndarray!methods!any"
-
-\end_inset
-
- (axis=None, out=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return True if any entries along axis evaluate True, otherwise return False
-\begin_inset LatexCommand index
-name "ndarray!methods|)"
-
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Standard
-\begin_inset Float table
-wide false
-sideways false
-status open
-
-\begin_layout Standard
-\begin_inset Caption
-
-\begin_layout Standard
-Array object calculation methods.
- If axis is an argument, then the calculation is performed along that axis.
- An axis value of None means the array is flattened before calculation proceeds.
- All of these methods can take an optional out= argument which can specify
- the output array to write the results into.
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset ERT
-status collapsed
-
-\begin_layout Standard
-
-
-\backslash
-setlength{
-\backslash
-extrarowheight}{0.5eM}
-\end_layout
-
-\begin_layout Standard
-
-\end_layout
-
-\begin_layout Standard
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\align center
-\begin_inset Tabular
-<lyxtabular version="3" rows="18" columns="3">
-<features>
-<column alignment="center" valignment="top" leftline="true" width="0">
-<column alignment="center" valignment="top" leftline="true" width="30text%">
-<column alignment="center" valignment="top" leftline="true" rightline="true" width="0">
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family sans
-\series bold
-\size large
-Method
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family sans
-\series bold
-\size large
-Arguments
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\family sans
-\series bold
-\size large
-Description
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-all
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(axis=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-true if all entries are true.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-any
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(axis=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-true if any entries are true.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-argmax
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(axis=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-index of largest value.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-argmin
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(axis=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-index of smallest value.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-clip
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(min=, max=)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-self[self>max]=max; self[self<min]=min
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-conj
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-()
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-complex conjugate
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-cumprod
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(axis=None, dtype=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-cumulative product
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-cumsum
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(axis=None, dtype=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-cumulative sum
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-max
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(axis=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-maximum of self
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-mean
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(axis=None, dtype=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-mean of self
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-min
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(axis=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-minimum of self
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-prod
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(axis=None, dtype=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-multiply elements of self together
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-ptp
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(axis=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-self.max(axis)-self.min(axis)
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-var
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(axis=None, dtype=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-variance of self
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-std
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(axis=None, dtype=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-standard deviation of self
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-sum
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(axis=None, dtype=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-add elements of self together
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-
-\series bold
-trace
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-(offset, axis1=0, axis2=0, dtype=None)
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-sum along a diagonal
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Array Special Methods
-\end_layout
-
-\begin_layout Standard
-Methods
-\begin_inset LatexCommand index
-name "ndarray!special methods|("
-
-\end_inset
-
- in this chapter are not generally meant to be called directly by the user.
- They are called by Python and are used to customize behavior of the ndarray
- object as it interacts with the Python language and standard library.
-
-\end_layout
-
-\begin_layout Subsection
-Methods for standard library functions
-\end_layout
-
-\begin_layout Description
-__copy__
-\begin_inset LatexCommand index
-name "ndarray!special methods!copy"
-
-\end_inset
-
- ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- To allow copy.copy(a) to perform a shallow copy of an array.
- Exactly the same as self.copy() (contents of object arrays are not copied).
-
-\end_layout
-
-\begin_layout Description
-__deepcopy__
-\begin_inset LatexCommand index
-name "ndarray!special methods!deepcopy"
-
-\end_inset
-
- (memodict)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- To allow copy.deepcopy(a) to perform a deep copy.
- This is the same as a shallow copy unless self is an object array.
- Then, after the shallow copy is made, a copy.deepcopy(item) is called for
- every item in the object array.
-
-\end_layout
-
-\begin_layout Description
-__reduce__
-\begin_inset LatexCommand index
-name "ndarray!special methods!reduce"
-
-\end_inset
-
- ()
-\end_layout
-
-\begin_layout Description
-__setstate__
-\begin_inset LatexCommand index
-name "ndarray!special methods!setstate"
-
-\end_inset
-
- (shape, typestr, isfortran, data)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Pickling support for arrays is provided by these two methods.
- When an array needs to be pickled, the __reduce__() method is called to
- provide a 3-tuple of already-pickleable objects.
- To construct a new object from the pickle, the first two elements of the
- 3-tuple are used to construct a new (0-length) array of the correct type
- and the last element of the 3-tuple, which is itself a 4-tuple of (shape,
- typestr, isfortran, data) is passed to the __setstate__ method of the newly
- created array to restore its contents.
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The reduce method returns a 3-tuple consisting of (callable, args, state)
- where callable is a simple constructor function that handles subclasses
- of the ndarray.
- Also, args is a 3-tuple of arguments to pass to this constructor function
- (type(self), (0,), self.dtypechar), and state is a 4-tuple of information
- giving the object's state (self.shape, self.dtypedescr, isfortran, string_or_list
-).
- In this tuple, isfortran is a Bool stating whether the following flattened
- data is in Fortran order or not, and string_or_list is a string formed
- by self.tostring() if the data type is not object.
- If the data type of self is an object array, then string_or_list is a flat
- list equivalent to self.ravel().tolist().
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- On load from a pickle, the pickling code uses the first two elements from
- the tuple returned by reduce to construct an empty 0-dimensional subclass
- of the correct type.
- The last element is then passed to the __setstate__ method of the newly
- created array to restore its contents.
-
-\end_layout
-
-\begin_layout Note
-When data is a string, the __setstate__ method will directly use the string
- memory as the array memory (new.base will point to the string).
- The typestr contains enough information to decode how the memory should
- be interpreted.
-\end_layout
-
-\begin_layout Subsection
-Basic customization
-\end_layout
-
-\begin_layout Description
-__new__
-\begin_inset LatexCommand index
-name "ndarray!special methods!new"
-
-\end_inset
-
- (subtype, shape=, dtype=long_, buffer=None, offset=0, strides=None, order=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This method creates a new ndarray.
- It is typically only used in the __new__ method of a subclass.
- This method is called to construct a new array whenever the object name
- is called,
-\family typewriter
-a=ndarray(...)
-\family default
-.
- It supports two basic modes of array creation:
-\end_layout
-
-\begin_layout Enumerate
-a single-segment array of the specified shape and data-type from newly allocated
- memory;
-\end_layout
-
-\begin_deeper
-\begin_layout Enumerate
-uses shape, dtype, strides, and order arguments; others are ignored;
-\end_layout
-
-\begin_layout Enumerate
-The order argument allows specification of a Fortran-style contiguous memory
- segment (order='Fortran');
-\end_layout
-
-\begin_layout Enumerate
-If strides is given, then it specifies the new strides of the array (and
- the order keyword is ignored).
- The strides will be checked for consistency with the dimension size so
- that steps outside of the memory won't occur.
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-an array of the given shape and data type using the provided object, buffer,
- which must export the buffer interface.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Enumerate
-all arguments can be used;
-\end_layout
-
-\begin_layout Enumerate
-strides can be given and will be checked for consistency with the shape,
- data type, and available memory in buffer;
-\end_layout
-
-\begin_layout Enumerate
-order indicates whether the data buffer should be interpreted as Fortran-style
- contiguous (order='Fortran') or not;
-\end_layout
-
-\begin_layout Enumerate
-offset can be used to start the array data at some offset in the buffer.
-
-\end_layout
-
-\end_deeper
-\begin_layout Note
-The ndarray uses the default no-op __init__
-\begin_inset LatexCommand index
-name "ndarray!special methods!init"
-
-\end_inset
-
- function because the array is completely initialized after __new__ is called.
-\end_layout
-
-\begin_layout Description
-__array__
-\begin_inset LatexCommand index
-name "ndarray!special methods!array"
-
-\end_inset
-
- (dtype {None})
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This is a special method that should always return an object of type ndarray.
- Useful for subclasses that need to get to the ndarray object.
-
-\end_layout
-
-\begin_layout Description
-__array_wrap__
-\begin_inset LatexCommand index
-name "ndarray!special methods!array\\_wrap"
-
-\end_inset
-
- (arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This is a special method that always returns an object of the same Python
- type as self using the array passed as an argument.
- This is mainly useful for subclasses as it is an easy way to get the subclass
- back from an ndarray.
-\end_layout
-
-\begin_layout Description
-__lt__
-\begin_inset LatexCommand index
-name "ndarray!special methods!lt"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__le__
-\begin_inset LatexCommand index
-name "ndarray!special methods!le"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__gt__
-\begin_inset LatexCommand index
-name "ndarray!special methods!gt"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__ge__
-\begin_inset LatexCommand index
-name "ndarray!special methods!ge"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__eq__
-\begin_inset LatexCommand index
-name "ndarray!special methods!eq"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__ne__
-\begin_inset LatexCommand index
-name "ndarray!special methods!ne"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Defined to support rich comparisons (<, <=, >, >=, ==, !=) on ndarrays
- using universal functions.
-
-\end_layout
-
-\begin_layout Description
-__str__
-\begin_inset LatexCommand index
-name "ndarray!special methods!str"
-
-\end_inset
-
- ()
-\end_layout
-
-\begin_layout Description
-__repr__
-\begin_inset LatexCommand index
-name "ndarray!special methods!repr"
-
-\end_inset
-
- ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- These functions print the array when called by str(self) and repr(self)
- respectively.
- Array printing can be changed using set_string_function(..).
- Default array printing has been borrowed from numarray whose printing code
- was written by Perry Greenfield and J.
- Todd Miller.
- By default, arrays print such that
-\end_layout
-
-\begin_layout Enumerate
-The last axis is always printed left to right.
-\end_layout
-
-\begin_layout Enumerate
-The next-to-last axis is printed top to bottom.
-\end_layout
-
-\begin_layout Enumerate
-Remaining axes are printed top to bottom with increasing numbers of separators.
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Five parameters of the printing can be set using keyword arguments with
-
-\family typewriter
-set_printoptions(...)
-\family default
-.
- The parameters
-\begin_inset LatexCommand index
-name "set\\_printoptions"
-
-\end_inset
-
- can all be retrieved using
-\family typewriter
-get_printoptions()
-\family default
-.
- These printing options
-\begin_inset LatexCommand index
-name "get\\_printoptions"
-
-\end_inset
-
- are
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-precision the number of digits of precision for floating point output (default
- 8);
-\end_layout
-
-\begin_layout Description
-threshold total number of array elements which triggers summarization rather
- than full representation (default 1000);
-\end_layout
-
-\begin_layout Description
-edgeitems number of array items in summary at beginning an end of each dimension
- (default 3);
-\end_layout
-
-\begin_layout Description
-linewidth the number of characters per line for the purpose of inserting
- line breaks (default 71);
-\end_layout
-
-\begin_layout Description
-suppress Boolean indicating whether or not to suppress printing of small
- floating point values using scientific notation (default False).
-
-\end_layout
-
-\end_deeper
-\begin_layout Description
-__nonzero__
-\begin_inset LatexCommand index
-name "ndarray!special methods!nonzero"
-
-\end_inset
-
- ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Truth-value testing for the array as a whole.
- It is called whenever the truth value of the ndarray as a whole object
- is required.
- This raises an error if the number of elements in the the array is larger
- than 1 because the truth value of such arrays is ambiguous.
- Use .any() and .all() instead to be clear about what is meant in such cases.
- If the number of elements is 0 then False is returned.
- If there is one element in the array, then the truth-value of this element
- is returned.
-\end_layout
-
-\begin_layout Subsection
-Container customization
-\end_layout
-
-\begin_layout Description
-__len__
-\begin_inset LatexCommand index
-name "ndarray!special methods!len"
-
-\end_inset
-
- ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns self.shape[0].
- It is called in response to len(self).
- Use self.size to get the total number of elements in the array.
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Notice that the default Python iterator for sequences is used when arrays
- are used in places that expect an iterator.
- This iterator returns successively self[0], self[1], ..., self[self.__len__()].
- Use self.flat to get an iterator that walks through the entire array one
- element at a time.
-\end_layout
-
-\begin_layout Description
-__getitem__
-\begin_inset LatexCommand index
-name "ndarray!special methods!getitem"
-
-\end_inset
-
- (key)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Called when evaluating self[key] construct.
- Items from the array can be selected using this customization.
- This construct has both standard and extended indexing abilities which
- are explained in Section
-\begin_inset LatexCommand ref
-reference "sec:Array-indexing"
-
-\end_inset
-
-.
- A named field can be retrieved if key is a string and fields are defined
- in the dtypedescr object associated with this array.
-
-\end_layout
-
-\begin_layout Description
-__setitem__
-\begin_inset LatexCommand index
-name "ndarray!special methods!setitem"
-
-\end_inset
-
- (key, value)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Called when evaluating self[key]=value.
- Items in the array can be set using this construct.
- This construct is explained in Section
-\begin_inset LatexCommand ref
-reference "sec:Array-indexing"
-
-\end_inset
-
-.
- A named field can be set if key is a string and fields are defined in the
- dtypedescr object associated with this array.
-
-\end_layout
-
-\begin_layout Description
-__getslice__
-\begin_inset LatexCommand index
-name "ndarray!special methods!getslice"
-
-\end_inset
-
- (i, j)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to self.__getitem__(slice(i,j)) but defined mainly so that C
- code can use the sequence interface.
- Called to evaluate self[i:j]
-\end_layout
-
-\begin_layout Description
-__setslice__
-\begin_inset LatexCommand index
-name "ndarray!special methods!setslice"
-
-\end_inset
-
- (i, j, value)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to self.__setitem__(slice(i,j), value) but defined mainly so
- C code can use the sequence interface.
- Called to evaluate self[i:j] = value.
-\end_layout
-
-\begin_layout Description
-__contains__
-\begin_inset LatexCommand index
-name "ndarray!special methods!contains"
-
-\end_inset
-
- (item)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Called to determine truth value of the
-\family typewriter
-item in self
-\family default
- construct.
- Returns the equivalent of (self==item).any()
-\end_layout
-
-\begin_layout Subsection
-Arithmetic customization
-\end_layout
-
-\begin_layout Subsubsection
-Binary
-\end_layout
-
-\begin_layout Description
-__add__
-\begin_inset LatexCommand index
-name "ndarray!special methods!add"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__sub__
-\begin_inset LatexCommand index
-name "ndarray!special methods!sub"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__mul__
-\begin_inset LatexCommand index
-name "ndarray!special methods!mul"
-
-\end_inset
-
- (self, other)
-\end_layout
-
-\begin_layout Description
-__div__
-\begin_inset LatexCommand index
-name "ndarray!special methods!div"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__truediv__
-\begin_inset LatexCommand index
-name "ndarray!special methods!truediv"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__floordiv__
-\begin_inset LatexCommand index
-name "ndarray!special methods!floordiv"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__mod__
-\begin_inset LatexCommand index
-name "ndarray!special methods!mod"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__divmod__
-\begin_inset LatexCommand index
-name "ndarray!special methods!divmod"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__pow__
-\begin_inset LatexCommand index
-name "ndarray!special methods!pow"
-
-\end_inset
-
- (other[,modulo])
-\end_layout
-
-\begin_layout Description
-__lshift__
-\begin_inset LatexCommand index
-name "ndarray!special methods!lshift"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__rshift__
-\begin_inset LatexCommand index
-name "ndarray!special methods!rshift"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__and__
-\begin_inset LatexCommand index
-name "ndarray!special methods!and"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__or__
-\begin_inset LatexCommand index
-name "ndarray!special methods!or"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__xor__
-\begin_inset LatexCommand index
-name "ndarray!special methods!xor"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- These methods are defined for ndarrays to implement the operations (
-\family typewriter
-+
-\family default
-,
-\family typewriter
--
-\family default
-,
-\family typewriter
-*
-\family default
-,
-\family typewriter
-/,
-\family default
-
-\family typewriter
-/,
-\family default
-
-\family typewriter
-//
-\family default
-,
-\family typewriter
-%
-\family default
-,
-\family typewriter
-divmod()
-\family default
-,
-\family typewriter
-**
-\family default
- or
-\family typewriter
-pow()
-\family default
-,
-\family typewriter
-<<,
-\family default
-
-\family typewriter
->>
-\family default
-,
-\family typewriter
-&
-\family default
-,
-\family typewriter
-^
-\family default
-,
-\family typewriter
-|
-\family default
-).
- This is done using calls to the corresponding universal function object
- (add, subtract, multiply, divide, true_divide, floor_divide, remainder,
- divide and remainder, power, left_shift, right_shift, bitwise_and, bitwise_xor,
- bitwise_or).
- These implement element-by-element operations for arrays that are broadcastable
- to the same shape.
-
-\end_layout
-
-\begin_layout Itemize
-any third argument to
-\family typewriter
-pow()
-\family default
- is silently ignored as the underlying ufunc (power) only takes two arguments.
-\end_layout
-
-\begin_layout Itemize
-the three division operators are all defined, div is active by default,
- truediv is active when __future__.division is in effect.
-\end_layout
-
-\begin_layout Note
-Because it is a built-in type (written in C), the __r<op>__ special methods
- are not directly defined for the ndarray.
-\end_layout
-
-\begin_layout Subsubsection
-In-place
-\end_layout
-
-\begin_layout Description
-__iadd__
-\begin_inset LatexCommand index
-name "ndarray!special methods!iadd"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__isub__
-\begin_inset LatexCommand index
-name "ndarray!special methods!isub"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__imul__
-\begin_inset LatexCommand index
-name "ndarray!special methods!imul"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__idiv__
-\begin_inset LatexCommand index
-name "ndarray!special methods!idiv"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__itruediv__
-\begin_inset LatexCommand index
-name "ndarray!special methods!itruediv"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__ifloordiv__
-\begin_inset LatexCommand index
-name "ndarray!special methods!ifloordiv"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__imod__
-\begin_inset LatexCommand index
-name "ndarray!special methods!imod"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__ipow__
-\begin_inset LatexCommand index
-name "ndarray!special methods!ipow"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__ilshift__
-\begin_inset LatexCommand index
-name "ndarray!special methods!ilshift"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__irshift__
-\begin_inset LatexCommand index
-name "ndarray!special methods!irshift"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__iand__
-\begin_inset LatexCommand index
-name "ndarray!special methods!iand"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__ixor__
-\begin_inset LatexCommand index
-name "ndarray!special methods!ixor"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-__ior__
-\begin_inset LatexCommand index
-name "ndarray!special methods!ior"
-
-\end_inset
-
- (other)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- These methods are implemented to handle the inplace operatiors (
-\family typewriter
-+=
-\family default
-,
-\family typewriter
--=
-\family default
-,
-\family typewriter
-*=
-\family default
-,
-\family typewriter
-/=
-\family default
-,
-\family typewriter
-/=
-\family default
-,
-\family typewriter
-//=
-\family default
-,
-\family typewriter
-%=
-\family default
-,
-\family typewriter
-**
-\family default
-=,
-\family typewriter
-<<
-\family default
-=,
-\family typewriter
->>=
-\family default
-,
-\family typewriter
-&=
-\family default
-,
-\family typewriter
-^=
-\family default
-,
-\family typewriter
-|=
-\family default
-).
- The inplace operators are implemented using the corresponding ufunc and
- its ability to take an output argument (which is set as self).
- Using inplace operations can save space and time and is therefore encouraged
- whenever appropriate.
-
-\end_layout
-
-\begin_layout Warning
-In place operations will perform the calculation using the precision decided
- by the data type of the two operands, but will silently downcast the result
- (if necessary) so it can fit back into the array.
- Therefore, for mixed precision calculations, a <op>= B can be different
- than a = a <op> B.
- For example, suppose a=ones((3,3)).
- Then a+=3j is different than a=a+3j While they both perform the same computatio
-n, a+=3j casts the result to fit back in a, while a=a+3j re-binds the name
- a to the result.
-\end_layout
-
-\begin_layout Subsubsection
-Unary operations
-\end_layout
-
-\begin_layout Description
-__neg__
-\begin_inset LatexCommand index
-name "ndarray!special methods!neg"
-
-\end_inset
-
- (self)
-\end_layout
-
-\begin_layout Description
-__pos__
-\begin_inset LatexCommand index
-name "ndarray!special methods!pos"
-
-\end_inset
-
- (self)
-\end_layout
-
-\begin_layout Description
-__abs__
-\begin_inset LatexCommand index
-name "ndarray!special methods!abs"
-
-\end_inset
-
- (self)
-\end_layout
-
-\begin_layout Description
-__invert__
-\begin_inset LatexCommand index
-name "ndarray!special methods!invert"
-
-\end_inset
-
- (self)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- These functions are called in response to the unary operations (
-\family typewriter
--
-\family default
-,
-\family typewriter
-+
-\family default
-,
-\family typewriter
-abs()
-\family default
-,
-\family typewriter
-~
-\family default
-).
- With the exception of __pos__, these are implemented using ufuncs (negative,
- absolute, invert).
- The unary
-\family typewriter
-+
-\family default
- operator, however simply calls self.copy(), and can therefore be used to
- get a copy of an array.
-
-\end_layout
-
-\begin_layout Description
-__complex__
-\begin_inset LatexCommand index
-name "ndarray!special methods!complex"
-
-\end_inset
-
- (self)
-\end_layout
-
-\begin_layout Description
-__int__
-\begin_inset LatexCommand index
-name "ndarray!special methods!int"
-
-\end_inset
-
- (self)
-\end_layout
-
-\begin_layout Description
-__long__
-\begin_inset LatexCommand index
-name "ndarray!special methods!long"
-
-\end_inset
-
- (self)
-\end_layout
-
-\begin_layout Description
-__float__
-\begin_inset LatexCommand index
-name "ndarray!special methods!float"
-
-\end_inset
-
- (self)
-\end_layout
-
-\begin_layout Description
-__oct__
-\begin_inset LatexCommand index
-name "ndarray!special methods!oct"
-
-\end_inset
-
- (self)
-\end_layout
-
-\begin_layout Description
-__hex__
-\begin_inset LatexCommand index
-name "ndarray!special methods!hex"
-
-\end_inset
-
- (self)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- These functions are also defined for the
-\family typewriter
-ndarray
-\family default
- object to handle the operations
-\family typewriter
-complex()
-\family default
-,
-\family typewriter
-int()
-\family default
-,
-\family typewriter
-long()
-\family default
-,
-\family typewriter
-float()
-\family default
-,
-\family typewriter
-oct()
-\family default
-, and
-\family typewriter
-hex()
-\family default
-.
- They work only on arrays that have one element in them and return the appropria
-te scalar
-\begin_inset LatexCommand index
-name "ndarray!special methods|)"
-
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Tip
-The function called to implement many arithmetic special methods for arrays
- can be modified using the function set_numeric_ops.
- This function is called with keyword arguments indicating which operation(s)
- to replace.
- A dictionary is returned containing showing the old functions.
- By default, these functions are set to the corresponding ufunc.
-
-\end_layout
-
-\begin_layout Section
-Array indexing
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand label
-name "sec:Array-indexing"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-More powerful array
-\begin_inset LatexCommand index
-name "indexing|("
-
-\end_inset
-
- indexing
-\begin_inset LatexCommand index
-name "ndarray!special methods!getitem"
-
-\end_inset
-
- was an important extension introduced by numarray, and was therefore an
- important part of the development of NumPy.
- In particular, the desire to select arbitrary elements based on their position
- in the array, and according to a mask was desirable.
-
-\end_layout
-
-\begin_layout Standard
-There are two kinds of indexing available using the
-\family typewriter
-X[obj]
-\family default
- syntax: basic slicing, and advanced indexing
-\begin_inset LatexCommand index
-name "ndarray!special methods!setitem"
-
-\end_inset
-
-.
- For the description of this syntax given below, X is the array to-be-sliced
- and obj is the
-\emph on
-selection
-\emph default
- object.
- Furthermore, define
-\begin_inset Formula $N\equiv$
-\end_inset
-
-X.ndim.
- These two methods of slicing have different behavior and are triggered
- depending on obj.
- Adding additional functionality yet remaining compatible with old uses
- of slicing complicated the rules a little.
- Hopefully, after studying this section, you will have a firm grasp of what
- kind of selection will be initiated depending on the selection object.
-\end_layout
-
-\begin_layout Tip
-in Python X[(exp1, exp2, ..., expN)] is equivalent to X[exp1, exp2, ..., expN]
- as the latter is just syntactic sugar for the former.
-\end_layout
-
-\begin_layout Subsection
-Basic Slicing
-\end_layout
-
-\begin_layout Standard
-Basic slicing
-\begin_inset LatexCommand index
-name "ndarray!special methods!getslice"
-
-\end_inset
-
- extends Python's basic concept of slicing
-\begin_inset LatexCommand index
-name "ndarray!special methods!setslice"
-
-\end_inset
-
- to N dimensions.
- Basic slicing occurs when obj is a slice object (constructed by start:stop:step
- notation inside of brackets), an integer, or a tuple of slice objects and
- integers.
- Ellipsis and newaxis objects can be interspersed with these as well.
- In order to remain backward compatible with a common usage in Numeric,
- basic slicing is also initiated if the selection object is any sequence
- (such as a list) containing slice objects, the ellipsis
-\begin_inset LatexCommand index
-name "ellipsis"
-
-\end_inset
-
- object, or the newaxis
-\begin_inset LatexCommand index
-name "newaxis"
-
-\end_inset
-
- object, but no integer arrays or other embedded sequences.
-
-\end_layout
-
-\begin_layout Standard
-The standard rules of sequence slicing apply to basic slicing on a per-dimension
- basis (including using a step index).
- Some useful concepts to remember include:
-\end_layout
-
-\begin_layout Itemize
-The basic slice syntax is '
-\begin_inset Formula $i:j:k$
-\end_inset
-
-' where
-\begin_inset Formula $i$
-\end_inset
-
- is the starting index,
-\begin_inset Formula $j$
-\end_inset
-
- is the stopping index, and
-\begin_inset Formula $k$
-\end_inset
-
- is the step (
-\begin_inset Formula $k\neq0$
-\end_inset
-
-).
- This selects the
-\begin_inset Formula $m$
-\end_inset
-
- elements (in the corresponding dimension) with index values
-\begin_inset Formula $i,\, i+k,\,\ldots,\, i+(m-1)k$
-\end_inset
-
- where
-\begin_inset Formula $m=q+(r\neq0)$
-\end_inset
-
- where
-\begin_inset Formula $q$
-\end_inset
-
- and
-\begin_inset Formula $r$
-\end_inset
-
- are the quotient and remainder obtained by dividing
-\begin_inset Formula $j-i$
-\end_inset
-
- by
-\begin_inset Formula $k$
-\end_inset
-
-:
-\begin_inset Formula $j-i=qk+r$
-\end_inset
-
-, so that
-\begin_inset Formula $i+\left(m-1\right)k<j.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Itemize
-Assume
-\begin_inset Formula $n$
-\end_inset
-
- is the number of elements in the dimension being sliced.
- Then, if
-\begin_inset Formula $i$
-\end_inset
-
- is not given it defaults to 0 for
-\begin_inset Formula $k>0$
-\end_inset
-
- and
-\begin_inset Formula $n$
-\end_inset
-
- for
-\begin_inset Formula $k<0$
-\end_inset
-
-.
- If
-\begin_inset Formula $j$
-\end_inset
-
- is not given it defaults to
-\begin_inset Formula $n$
-\end_inset
-
- for
-\begin_inset Formula $k>0$
-\end_inset
-
- and
-\begin_inset Formula $-1$
-\end_inset
-
- for
-\begin_inset Formula $k<0$
-\end_inset
-
-.
- If
-\begin_inset Formula $k$
-\end_inset
-
- is not given it defaults to 1.
- Note that '::' is the same as ':' and means select all indices along this
- axis.
-
-\end_layout
-
-\begin_layout Itemize
-If the number of objects in the selection tuple is less than
-\begin_inset Formula $N$
-\end_inset
-
-, then ':' is assumed for any remaining dimensions.
-\end_layout
-
-\begin_layout Itemize
-Ellipsis expand to the number of ':' objects needed to make a selection
- tuple of the same length as X.ndim.
- Only one ellipsis is expanded, any others are interpreted as more ':'
-\end_layout
-
-\begin_layout Itemize
-Each newaxis object in the selection tuple serves to expand the dimensions
- of the resulting selection by one unit-length dimension.
- The added dimension is the position of the newaxis object in the selection
- tuple.
-
-\end_layout
-
-\begin_layout Itemize
-An integer,
-\begin_inset Formula $i$
-\end_inset
-
-, returns the same values as
-\begin_inset Formula $i:i+1$
-\end_inset
-
-
-\series bold
-except
-\series default
- the dimensionality of the returned object is reduced by 1.
- In particular, a selection tuple with the
-\begin_inset Formula $p^{\textrm{th}}$
-\end_inset
-
- element an integer (and all other entries ':') returns the corresponding
- sub-array with dimension
-\begin_inset Formula $N-1$
-\end_inset
-
-.
- If
-\begin_inset Formula $N=1,$
-\end_inset
-
- then the returned object is an Array Scalar.
- These objects are explained in Chapter
-\begin_inset LatexCommand ref
-reference "cha:Scalar-objects"
-
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Itemize
-If the selection tuple has all entries ':' except the
-\begin_inset Formula $p^{\textrm{th}}$
-\end_inset
-
- entry which is a slice object
-\begin_inset Formula $i:j:k$
-\end_inset
-
-, then the returned array has dimension
-\begin_inset Formula $N$
-\end_inset
-
- formed by concatenating the sub-arrays returned by integer indexing of
- elements
-\begin_inset Formula $i$
-\end_inset
-
-,
-\begin_inset Formula $i+k$
-\end_inset
-
-,
-\begin_inset Formula $i+(m-1)k<j$
-\end_inset
-
-,
-\end_layout
-
-\begin_layout Itemize
-Basic slicing with more than one non-':' entry in the slicing tuple, acts
- like repeated application of slicing using a single non-':' entry, where
- the non-':' entries are successively taken (with all other non-':' entries
- replaced by ':').
- Thus, X[ind1,...,ind2,:] acts like X[ind1][...,ind2,:] under basic slicing.
- Note this is NOT true for advanced slicing.
-
-\end_layout
-
-\begin_layout Itemize
-You may use slicing to set values in the array, but (unlike lists) you can
- never grow the array.
- The size of the value to be set in X[obj] = value must be (broadcastable)
- to the same shape as X[obj].
-
-\end_layout
-
-\begin_layout Standard
-Basic slicing always returns another
-\emph on
-view
-\begin_inset LatexCommand index
-name "ndarray!view"
-
-\end_inset
-
-
-\emph default
- of the array.
- In other words, the returned array from a basic slicing operation uses
- the same data as the original array.
- This can be confusing at first, but it is faster and can save memory.
- A copy can always be obtained if needed using the unary + operator (which
- has lower precedence than slicing) or the .copy() method.
-
-\end_layout
-
-\begin_layout Tip
-Remember that a slicing tuple can always be constructed as obj and used
- in the x[obj] notation.
- Slice objects can be used in the construction in place of the [start:stop:step]
- notation.
- For example,
-\family typewriter
-x[1:10:5,::-1]
-\family default
- can also be implemented as
-\family typewriter
-obj=(slice(1,10,5), slice(None,None,-1)); X[obj]
-\family default
-.
- This can be useful for constructing generic code that works on arrays of
- arbitrary dimension.
-\end_layout
-
-\begin_layout Subsection
-Advanced selection
-\end_layout
-
-\begin_layout Standard
-Advanced selection is triggered when the selection object, obj, is a non-tuple
- sequence object, an ndarray (of data type integer or bool), or a tuple
- with at least one sequence object or ndarray (of data type integer or bool).
- There are two types of advanced indexing: integer and Boolean.
- Advanced selection always returns a copy of the data (contrast with basic
- slicing that returns a view).
-
-\end_layout
-
-\begin_layout Subsubsection
-Integer
-\end_layout
-
-\begin_layout Standard
-Integer indexing allows selection of arbitrary items in the array based
- on their
-\begin_inset Formula $N$
-\end_inset
-
--dimensional index.
- This kind of selection occurs when advanced selection is triggered and
- the selection object is not an array of data type bool.
- For the discussion below, when the selection object is not a tuple, it
- will be referred to as if it had been promoted to a 1-tuple, which will
- be called the selection tuple.
- The rules of advanced integer-style indexing are:
-\end_layout
-
-\begin_layout Itemize
-if the length of the selection tuple is larger than
-\begin_inset Formula $N$
-\end_inset
-
-(=X.ndim) an error is raised.
-\end_layout
-
-\begin_layout Itemize
-all sequences and scalars in the selection tuple are converted to intp indexing
- arrays.
-
-\end_layout
-
-\begin_layout Itemize
-all selection tuple objects must be convertible to intp arrays, or slice
- objects, or the Ellipsis (...) object.
-\end_layout
-
-\begin_layout Itemize
-Exactly one Ellipsis object will be expanded, any other Ellipsis objects
- will be treated as full slice (':') objects.
- The Ellipsis object is replaced with as many full slice (':') objects as
- needed to make the length of the selection tuple
-\begin_inset Formula $N$
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Itemize
-If the selection tuple is smaller than
-\begin_inset Formula $N$
-\end_inset
-
-, then as many ':' objects as needed are added to the end of the selection
- tuple so that the modified selection tuple has length
-\begin_inset Formula $N$
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Itemize
-The shape of all the integer indexing arrays must be broadcastable to the
- same shape.
- Arrays are broadcastable if any of the following are satisfied
-\end_layout
-
-\begin_deeper
-\begin_layout Enumerate
-The arrays all have exactly the same shape.
-\end_layout
-
-\begin_layout Enumerate
-The arrays all have the same number of dimensions and the length of each
- dimensions is either a common length or 1.
-\end_layout
-
-\begin_layout Enumerate
-The arrays that have too few dimensions can have their shapes pre-pended
- with a dimension of length 1 to satisfy property 2.
-
-\end_layout
-
-\end_deeper
-\begin_layout Itemize
-The shape of the output (or the needed shape of the object to be used for
- setting) is the broadcasted shape.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Example: If a.shape is (5,1), b.shape is (1,6), c.shape is (6,) and d.shape
- is () so that d is a scalar, then a, b, c, and d are all broadcastable
- to dimension (5,6).
- The array
-\begin_inset Quotes eld
-\end_inset
-
-a
-\begin_inset Quotes erd
-\end_inset
-
- acts like a (5,6) array where a[:,0] is broadcast to the other columns,
-
-\begin_inset Quotes eld
-\end_inset
-
-b
-\begin_inset Quotes erd
-\end_inset
-
- acts like a (5,6) array where b[0,:] is broadcast to the other rows,
-\begin_inset Quotes eld
-\end_inset
-
-c
-\begin_inset Quotes erd
-\end_inset
-
- acts like a (1,6) array and therefore a (5,6) where c[:] is broadcast to
- every row, and finally
-\begin_inset Quotes eld
-\end_inset
-
-d
-\begin_inset Quotes erd
-\end_inset
-
- acts like a (5,6) array where the single values is repeated.
-
-\end_layout
-
-\end_deeper
-\begin_layout Itemize
-After expanding any ellipses and filling out any missing (':') objects in
- the selection tuple, then let
-\begin_inset Formula $N_{t}$
-\end_inset
-
- be the number of indexing arrays, and let
-\begin_inset Formula $N_{s}=N-N_{t}$
-\end_inset
-
- be the number of slice objects.
- Note that
-\begin_inset Formula $N_{t}>0$
-\end_inset
-
- (or we wouldn't be doing advanced integer indexing).
-
-\end_layout
-
-\begin_layout Itemize
-If
-\begin_inset Formula $N_{s}=0$
-\end_inset
-
- then the
-\begin_inset Formula $M$
-\end_inset
-
--dimensional result is constructed by varying the index tuple
-\begin_inset Formula $\left(i_{1},\ldots,i_{M}\right)$
-\end_inset
-
- over the range of the result shape and for each value of the index tuple
- setting:
-\begin_inset Formula \[
-\textrm{result[$i_{1},\ldots,i_{M}$]=X[ind$_{1}$[$i_{1},\ldots i_{M}$], ind$_{2}$[$i_{1},\ldots,i_{M}$], \, etc.,\, ind$_{N}$[$i_{1},\ldots,i_{M}$]}.\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Example: Suppose the shape of the broadcasted indexing arrays is 3-dimensional
- and
-\begin_inset Formula $N$
-\end_inset
-
- is 2.
- Then the result is found by letting
-\begin_inset Formula $i,j,k$
-\end_inset
-
- run over the shape found by broadcasting
-\begin_inset Formula $\textrm{ind}_{1},$
-\end_inset
-
- and
-\begin_inset Formula $\textrm{ind}_{2},$
-\end_inset
-
-and for each
-\begin_inset Formula $i,j,k$
-\end_inset
-
- setting result[
-\begin_inset Formula $i,j,k$
-\end_inset
-
-] = X[
-\begin_inset Formula $\textrm{ind}_{1}[i,j,k]$
-\end_inset
-
-,
-\begin_inset Formula $\textrm{ind}_{2}[i,j,k]$
-\end_inset
-
-].
-
-\end_layout
-
-\end_deeper
-\begin_layout Itemize
-If
-\begin_inset Formula $N_{s}>0$
-\end_inset
-
-, then partial indexing is done.
- This can be somewhat mind-boggling to understand, but if you think in terms
- of the shapes of the arrays involved, it can be easier to grasp what happens.
- In simple cases (
-\emph on
-i.e.
-
-\emph default
- one indexing array and
-\begin_inset Formula $N-1$
-\end_inset
-
- slice objects) it does exactly what you would expect (concatenation of
- repeated application of basic slicing).
- The rule for partial indexing is that the shape of the result (or the interpret
-ed shape of the object to be used in setting) is the shape of X with the
- indexed subspace replaced with the broadcasted indexing subspace.
- If the index subspaces are right next to each other, then the broadcasted
- indexing space directly replaces all of the indexed subspaces in X.
- If the indexing subspaces are separated (by slice objects), then the broadcaste
-d indexing space is first, followed by the sliced subspace of X.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Example\InsetSpace ~
-1: Suppose X.shape is (10,20,30) and ind is a (2,3,4) indexing intp
- array, then result=X[...,ind,:] has shape (10,2,3,4,30) because the (20,)-shaped
- subspace has been replaced with a (2,3,4)-shaped broadcasted indexing subspace.
- If we let
-\begin_inset Formula $i,j,k$
-\end_inset
-
- loop over the (2,3,4)-shaped subspace then result[...,i,j,k,:] = X[...,ind[i,j,k],:].
- This example produces the same result as X.take(ind,axis=-2).
-
-\end_layout
-
-\begin_layout Description
-Example\InsetSpace ~
-2: Now let X.shape be (10,20,30,40,50) and suppose
-\begin_inset Formula $\textrm{ind}_{1}$
-\end_inset
-
- and
-\begin_inset Formula $\textrm{ind}_{2}$
-\end_inset
-
- are broadcastable to the shape (2,3,4).
- Then X[:,ind
-\begin_inset Formula $_{1}$
-\end_inset
-
-,ind
-\begin_inset Formula $_{2}$
-\end_inset
-
-] has shape (10,2,3,4,40,50) because the (20,30)-shaped subspace from X
- has been replaced with the (2,3,4) subspace from the indices.
- However, X[:,ind
-\begin_inset Formula $_{1}$
-\end_inset
-
-,:,ind
-\begin_inset Formula $_{2}$
-\end_inset
-
-,:] has shape (2,3,4,10,30,50) because there is no unambiguous place to
- drop in the indexing subspace, thus it is tacked-on to the beginning.
- It is always possible to use .transpose() to move the sups pace anywhere
- desired.
- This example cannot be replicated using take.
-
-\end_layout
-
-\end_deeper
-\begin_layout Subsubsection
-Boolean
-\end_layout
-
-\begin_layout Standard
-This advanced selection occurs when obj is an array object of Boolean type
- (such as may be returned from comparison operators).
- It is always equivalent to (but faster than) X[obj.nonzero()] where as described
- above obj.nonzero() returns a tuple (of length obj.ndim) of integer index
- arrays showing the True elements of obj.
-
-\end_layout
-
-\begin_layout Standard
-The special case when obj.ndim == X.ndim is worth mentioning.
- In this case X[obj] returns a 1-dimensional array filled with the elements
- of X corresponding to the True values of obj.
- It The search order will be C-style (last index varies the fastest).
- If obj has True values at entries that are outside of the bounds of X,
- then an index error will be raised.
-\end_layout
-
-\begin_layout Standard
-You can also use Boolean arrays as element of the selection tuple.
- In such instances, they will always be interpreted as nonzero(obj) and
- the equivalent integer indexing will be done.
- In general you can think of indexing with Boolean arrays as indexing with
- nonzero(<Boolean>).
-\end_layout
-
-\begin_layout Warning
-the definition of advanced selection means that X[(1,2,3),] is fundamentally
- different than X[(1,2,3)].
- The latter is equivalent to X[1,2,3] which will trigger basic selection
- while the former will trigger advanced selection.
- Be sure to understand why this is True.
- You should also recognize that x[[1,2,3]] will trigger advanced selection,
- but X[[1,2,slice(None)]] will trigger basic selection.
-\end_layout
-
-\begin_layout Subsection
-Flat Iterator indexing
-\end_layout
-
-\begin_layout Standard
-As mentioned previously, X.flat returns an iterator that will iterate over
- the entire array (in C-contiguous style with the last index varying the
- fastest).
- This iterator object can also be indexed using basic slicing or advanced
- indexing as long as the selection object is not a tuple.
- This should be clear from the fact that X.flat is a 1-dimensional view.
- X.flat can be used for integer indexing using 1-dimensional C-style-flat
- indices.
- The shape of any returned array is therefore the shape of the integer indexing
-\begin_inset LatexCommand index
-name "indexing|)"
-
-\end_inset
-
- object
-\begin_inset LatexCommand index
-name "ndarray|)"
-
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Chapter
-Basic Routines
-\end_layout
-
-\begin_layout Quotation
-Do not pray for tasks equal to your powers; pray for powers equal to your
- tasks.
- Then the doing of your work shall be no miracle, but you shall be the miracle.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Phillips Brooks
-\end_layout
-
-\begin_layout Quote
-Education isn't how much you have committed to memory, or even how much
- you know.
- It's being able to differentiate between what you do know and what you
- don't.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Anatole France
-\end_layout
-
-\begin_layout Section
-Creating arrays
-\end_layout
-
-\begin_layout Description
-array
-\begin_inset LatexCommand index
-name "array"
-
-\end_inset
-
- (object=, dtype=None, copy=True, order=None, subok=False, ndmin=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Create a new ndarray of data type, dtype (or determined from object if
- dtype is None).
- The shape of the new array will be determined from object.
- If copy is True, then ensure a copy of the object is made.
- If copy is False, then the returned object is a copy of the array only
- if dtype is not equivalent to the data type of object.
- If order is 'Fortran' then the resulting array will be in Fortran order,
- otherwise it is in C order.
- If subok (subclasses are O.K.) is True then pass through subclasses of the
- array object if possible.
- If subok is False then only ndarray objects may be returned.
- The ndmin parameter specifies that the returned array must have at least
- the given number of dimensions.
-
-\end_layout
-
-\begin_layout Description
-asarray
-\begin_inset LatexCommand index
-name "asarray"
-
-\end_inset
-
- (object=, dtype=None, order=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Exactly the same as array(...) except the default copy argument is False,
- and subok is always False.
- Using this function always returns the base class ndarray.
-
-\end_layout
-
-\begin_layout Description
-asanyarray
-\begin_inset LatexCommand index
-name "asanyarray"
-
-\end_inset
-
- (object, dtype=None, order=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Thin wrapper around array(...) with subok=1.
- You should use this routine if you are only making use of the array attributes,
- and believe the calculations that will follow would work with any subclass
- of the array.
- Use of this routine increases the chance that array subclasses will interact
- seamlessly with your function --- returning the same subclasses.
-
-\end_layout
-
-\begin_layout Description
-require
-\begin_inset LatexCommand index
-name "require"
-
-\end_inset
-
- (object, dtype=None, requirements=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Require a Python object to be an ndarray (or a sub-class) of the given
- data-type if it can be cast safely, otherwise raise an error.
- The requirements, if given, are a sequence containing the requested combination
- of the flags 'C_CONTIGUOUS' ('C'), 'F_CONTIGUOUS' ('F'), 'ALIGNED' ('A'),
- 'WRITEABLE' ('W'), 'OWNDATA' ('O'), and the special directive 'ENSUREARRAY'
- ('E').
- These strings dictate which flags should be set on the return array (note
- only one of 'F_CONTIGUOUS' or 'C_CONTIGUOUS' should be used and 'F_CONTIGUOUS'
- over-rides 'C_CONTIGUOUS').
- The special directive 'ENSUREARRAY' makes sure that a base-class ndarray
- is returned instead of allowing sub-classes to pass through.
- This function is particularly useful in a Python interface to C-code (say
- called using ctypes
-\begin_inset LatexCommand index
-name "ctypes"
-
-\end_inset
-
-).
-
-\end_layout
-
-\begin_layout Description
-arange
-\begin_inset LatexCommand index
-name "arange"
-
-\end_inset
-
- (start=, stop=None, step=1, dtype=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Function similar to Python's built-in range() function except it returns
- an ndarray object.
- Return a 1-d array of data type, dtype (or determined from the start, stop,
- and step objects if None), that starts at start, ends
-\emph on
-before
-\emph default
- stop and is incremented by step.
- The returned array has length
-\begin_inset Formula $n$
-\end_inset
-
- where
-\begin_inset Formula \[
-n=\left\lceil \frac{\textrm{stop}-\textrm{start}}{\textrm{step}}\right\rceil \]
-
-\end_inset
-
- with element
-\begin_inset Formula $i$
-\end_inset
-
- equal to
-\begin_inset Formula $\textrm{start}+i\cdot\textrm{step}.$
-\end_inset
-
- If stop is None, then the first argument is interpreted as stop and start
- is 0.
-
-\end_layout
-
-\begin_layout Note
-By definition of the ceiling function (denoted by
-\begin_inset Formula $\left\lceil x\right\rceil $
-\end_inset
-
-), we know that
-\begin_inset Formula $x\leq\left\lceil x\right\rceil <x+1$
-\end_inset
-
-, therefore this definition of the length of arange guarantees that
-\begin_inset Formula $\textrm{start}+n\cdot\textrm{step}\geq\textrm{stop}$
-\end_inset
-
- as well as
-\begin_inset Formula $\textrm{start}+(n-1)\cdot\textrm{step}<\textrm{stop}$
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Description
-isfortran
-\begin_inset LatexCommand index
-name "isfortran"
-
-\end_inset
-
- (arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to
-\family typewriter
-arr.flags.fnc
-\family default
- and therefore returns True only if arr is Fortran-contiguous but not also
- C-contiguous.
-\end_layout
-
-\begin_layout Description
-empty
-\begin_inset LatexCommand index
-name "empty"
-
-\end_inset
-
- (shape=, dtype=int, order='C')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an uninitialized array of data type, dtype, and given shape.
- The memory layout defaults to C-style contiguous, but can be made Fortran-style
- contiguous with a 'Fortran' order keyword.
-\end_layout
-
-\begin_layout Description
-empty_like
-\begin_inset LatexCommand index
-name "empty\\_like"
-
-\end_inset
-
- (arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Syntactic sugar for empty(a.shape, a.dtype, isfortran(arr))
-\end_layout
-
-\begin_layout Description
-zeros
-\begin_inset LatexCommand index
-name "zeros"
-
-\end_inset
-
- (shape=, dtype=int, order='C')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an array of data type dtype and given shape filled with zeros.
- The memory layout may be altered from the default C-style contiguous with
- the order keyword.
-\end_layout
-
-\begin_layout Description
-zeros_like
-\begin_inset LatexCommand index
-name "zeros\\_like"
-
-\end_inset
-
- (arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Syntactic sugar for zeros(a.shape, a.dtype, isfortran(arr))
-\end_layout
-
-\begin_layout Description
-ones
-\begin_inset LatexCommand index
-name "ones"
-
-\end_inset
-
- (shape=, dtype=int, order='C')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Syntactic sugar for a = zeros(shape, dtype, order); a+= 1.
-
-\end_layout
-
-\begin_layout Description
-fromstring
-\begin_inset LatexCommand index
-name "fromstring"
-
-\end_inset
-
- (string=,dtype=int, count=-1, sep='')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- If sep is '', then return a new 1-d array with data-type descriptor given
- by dtype and with memory initialized (copied) from the raw binary data
- in string.
- If count is non-negative, the new array will have count elements (with
- a
-\family typewriter
-ValueError
-\family default
- raised if count requires more data than the string offers), otherwise the
- size of the string must be a multiple of the itemsize implied by dtype,
- and count will be the length of the string divided by the itemsize.
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- If sep is not '', then interpret the string in ASCII mode with the provided
- separator and convert the string to an array of numbers.
- Any additional white-space will be ignored.
-\end_layout
-
-\begin_layout Description
-fromfile
-\begin_inset LatexCommand index
-name "fromfile"
-
-\end_inset
-
- (file=, dtype=int, count=-1, sep='')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a 1-d array of data type, dtype, from a file (open file object or
- string with the name of a file to read).
- The file will be read in binary mode if sep is the empty string.
- Otherwise, the file will be read in text mode with sep providing the separator
- string between the entries.
- If count is -1, then the size will be determined from the file, otherwise,
- up to count items will be read from the file.
- If fewer than count items are read, then a RunTimeWarning is issued indicating
- the number of items read.
-\end_layout
-
-\begin_layout Description
-frombuffer
-\begin_inset LatexCommand index
-name "frombuffer"
-
-\end_inset
-
- (buffer, dtype=intp, count=-1, offset=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Very similar to (binary-mode) fromstring in interpretation of the arguments,
- except buffer can be any object exposing the buffer interface (or any object
- with a __buffer__ attribute that returns a buffer exposing the buffer protocol).
- The new array shares memory with the buffer object.
- The new array will be read-only if the buffer does not expose a writeable
- buffer.
-
-\end_layout
-
-\begin_layout Description
-fromiter
-\begin_inset LatexCommand index
-name "fromiter"
-
-\end_inset
-
- (iterator_or_generator, dtype=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct an array from an iterator or a generator.
- Only handles 1-dimensional cases.
- By default the data-type is determined from the objects returned from the
- iterator.
-
-\end_layout
-
-\begin_layout Description
-load
-\begin_inset LatexCommand index
-name "load"
-
-\end_inset
-
- (file)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Load a NumPy binary file (.npy), a NumPy binary zipfile (.npz), or a pickled
- Python object from an open file.
- If file is a string, then open a file with that name first.
- Which kind of file should be loaded is determined by the magic bytes at
- the front of the file (not by filename extension).
- See
-\shape italic
-save
-\shape default
- and
-\shape italic
-savez
-\shape default
- for functions which write .npy and .npz files from NumPy arrays.
- If file is a binary zipfile, then an instance of NpzObj is returned.
- This object is a simple wrapper around the zip-file which allows extraction
- of the arrays stored within it.
- The .files attribute of the NpzObj returns a list of all arrays in the archive.
- These arrays are accessible through a dictionary-like interface (obj['name'])
- or through attribute lookup through the .f attribute of the returned object
- (obj.f.name).
- If the file is a NumPy binary file (.npy), then the array itself is returned
- from this function.
- If the file contains a pickled object, then that object is returned.
-
-\end_layout
-
-\begin_layout Description
-loads
-\begin_inset LatexCommand index
-name "loads"
-
-\end_inset
-
- (str)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Load a pickled array from a string.
- Equivalent to cPickle.loads(str).
- This function will likely be deprecated in the future.
- Use cPickle instead.
-\end_layout
-
-\begin_layout Description
-save
-\begin_inset LatexCommand index
-name "save"
-
-\end_inset
-
- (file, arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Save the array into a file which can be a string or an open file-like object.
- If the file is given as a string, then it will have .npy appended if it
- does not already end with that extension.
- The .npy file format is NumPy-specific and is documented in the numpy.lib.format
- module.
- It only stores a single array.
-
-\end_layout
-
-\begin_layout Description
-savez
-\begin_inset LatexCommand index
-name "savez"
-
-\end_inset
-
- (file, *args, **kwds)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Save a sequence of arrays into a NumPy binary zipfile (.npz).
- An .npz file is a regular zip-file containing multiple .npy files.
- If keywords are given, then the keyword names are used as filenames (with
- the .npy extension added) in the zip-file with the corresponding values
- being converted to arrays and stored in the specified filename.
- Any non-keyword arguments that are passed in results in the names arr_0,
- arr_1, etc.
- being used in the zip-file (if a keyword by one of those names also exists,
- then a ValueError is raised).
-
-\end_layout
-
-\begin_layout Description
-loadtxt
-\end_layout
-
-\begin_layout Description
-savetxt
-\end_layout
-
-\begin_layout Description
-DataSource
-\end_layout
-
-\begin_layout Description
-indices
-\begin_inset LatexCommand index
-name "indices"
-
-\end_inset
-
- (dimensions, dtype=intp)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an array of dtype representing
-\begin_inset Formula $n$
-\end_inset
-
-(=len(dimensions)) grids of indices each with variation in a single direction.
- The returned array has shape (
-\begin_inset Formula $n$
-\end_inset
-
-,)+dimensions.
- Compare with mgrid.
-
-\end_layout
-
-\begin_layout MyCode
->>> indices((2,3))
-\newline
-array([[[0, 0, 0],
-\newline
- [1, 1, 1]],
-\newline
-
-\newline
- [[0, 1, 2],
-\newline
-
- [0, 1, 2]]])
-\end_layout
-
-\begin_layout Description
-fromfunction
-\begin_inset LatexCommand index
-name "fromfunction"
-
-\end_inset
-
- (function, dimensions, **kwargs)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct an array from a function called on a tuple of index grids.
- The function should be able to take array arguments and process them like
- ufuncs (use vectorize if it doesn't).
- The function should accept as many arguments as there are dimensions which
- is a sequence of numbers indicating the length of the desired output for
- each axis.
- Keyword arguments to function may also be passed in as keywords to fromfunction.
-\end_layout
-
-\begin_layout MyCode
->>> print fromfunction(lambda i,j: i+j, (2,3))
-\newline
-[[ 0.
- 1.
- 2.]
-\newline
- [ 1.
- 2.
- 3.]]
-\end_layout
-
-\begin_layout Description
-identity
-\begin_inset LatexCommand index
-name "identity"
-
-\end_inset
-
- (n, dtype=intp)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a 2-d array of shape (n,n) and data type, dtype with ones along
- the main diagonal.
-
-\end_layout
-
-\begin_layout Description
-where
-\begin_inset LatexCommand index
-name "where"
-
-\end_inset
-
- (condition[, x, y])
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns an array shaped like condition, that has the elements of x and
- y respectively where condition is respectively true or false.
- If x and y are not given, then it is equivalent to nonzero(condition).
-\end_layout
-
-\begin_layout Description
-flatnonzero
-\begin_inset LatexCommand index
-name "flatnonzero"
-
-\end_inset
-
- (arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return indices that are non-zero in a flattened version of arr.
- Equivalent to a.ravel().nonzero()[0].
-\end_layout
-
-\begin_layout Description
-putmask
-\begin_inset LatexCommand index
-name "putmask"
-
-\end_inset
-
- (arr=, mask=, values=)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Performs the equivalent of
-\end_layout
-
-\begin_layout LyX-Code
-for n, obj in enumerate(
-\series bold
-mask
-\series default
-.flat):
-\end_layout
-
-\begin_layout LyX-Code
- if obj:
-\end_layout
-
-\begin_layout LyX-Code
- self.flat[n] =
-\series bold
-values
-\series default
-[n]
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The values array is repeated if it is too short.
- In particular, this means that indexing on the values array is modular
- it's length, which might be surprising you are expecting putmask to work
- the same as arr[mask]=values.
-\end_layout
-
-\begin_layout Description
-lexsort
-\begin_inset LatexCommand index
-name "lexsort"
-
-\end_inset
-
- (keys=, axis=-1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an array of indices similar to argsort except sorting is done using
- all of the provided keys.
- First a sort is computed using key[0], then the indices are further altered
- by sorting on key[1].
- This is repeated until sorting has been performed on all of the keys.
- This is a useful function for multiple-field sorting.
-\end_layout
-
-\begin_layout MyCode
->>> a = [1,2,1,3,1,5]; b = [0,4,5,6,2,3]
-\newline
->>> ind = lexsort((b,a))
-\newline
->>> print
- take(a,ind)
-\newline
-[1 1 1 2 3 5]
-\newline
->>> print take(b,ind)
-\newline
-[0 2 5 4 6 3]
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Notice the order the keys had to be used in order to get a lexicographical
- sorting order.
- To clarify, suppose three equal-length sequences are fields of an underlying
- data-type: (f1,f2,f3).
- If we want to sort first on f1 and then on f2 and then on f3, the indices
- that would accomplish that sort are obtained as lexsort((f3,f2,f1)).
-\end_layout
-
-\begin_layout Section
-Operations on two or more arrays
-\end_layout
-
-\begin_layout Description
-concatenate
-\begin_inset LatexCommand index
-name "concatenate"
-
-\end_inset
-
- (seq=, axis=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct a new array from elements of the sequence object seq concatenated
- along the given axis.
- The elements of the sequence object must have compatible types and be the
- same shape.
- If axis is None, then flatten each element of seq before concatenating
- together to construct a 1-d array.
-\end_layout
-
-\begin_layout Description
-correlate
-\begin_inset LatexCommand index
-name "correlate"
-
-\end_inset
-
- (x, y, mode='valid')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Compute the 1-d cross correlation of x and y keeping portions determined
- by mode which may be 'valid' (0), 'same' (1), or 'full' (2).
- The 'full' cross-correlation between two 1-d arrays is computed as
-\begin_inset Formula \[
-z\left[n\right]=\sum_{i=\max\left(n-M,0\right)}^{\min\left(n,K\right)}x\left[i\right]y\left[n+i\right],\]
-
-\end_inset
-
-for
-\begin_inset Formula $n=0\ldots K+M$
-\end_inset
-
- where
-\begin_inset Formula $K$
-\end_inset
-
-=len(
-\begin_inset Formula $x$
-\end_inset
-
-)-1 and
-\begin_inset Formula $M$
-\end_inset
-
-=len(
-\begin_inset Formula $y$
-\end_inset
-
-)-1, and we assume
-\begin_inset Formula $K\geq M$
-\end_inset
-
- (without loss of generality because we can interchange the roles of
-\begin_inset Formula $x$
-\end_inset
-
- and
-\begin_inset Formula $y$
-\end_inset
-
- without effect).
- For this formula to work, we assume that
-\begin_inset Formula $x[i]=0$
-\end_inset
-
- when
-\begin_inset Formula $i\notin\left[0,K-1\right]$
-\end_inset
-
- and
-\begin_inset Formula $y[j]=0$
-\end_inset
-
- when
-\begin_inset Formula $j\neq[0,M-1]$
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- If mode is 'same' then only the
-\begin_inset Formula $K$
-\end_inset
-
- middle values are returned starting at
-\begin_inset Formula $n=\left\lfloor \frac{M-1}{2}\right\rfloor $
-\end_inset
-
-.
- If the flag has a value of 'valid' then only the middle
-\begin_inset Formula $K-M+1=\left(K+1\right)-\left(M+1\right)+1$
-\end_inset
-
- output values are returned starting at
-\begin_inset Formula $n=M.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-convolve
-\begin_inset LatexCommand index
-name "convolve"
-
-\end_inset
-
- (x, y, mode='valid')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Convolution is very similar to correlation except it is defined with one
- sequence reversed:
-\begin_inset Formula \[
-z\left[n\right]=\sum_{i}x[i]y[n-i].\]
-
-\end_inset
-
- The mode keyword has the same effect as it does for correlation.
- Convolution ('full') between two 1-d arrays implements polynomial multiplicatio
-n where the array entries are viewed as coefficients for polynomials.
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Example: Consider that
-\begin_inset Formula $(x^{3}+4x^{2}+2)$
-\end_inset
-
-
-\begin_inset Formula $\left(x^{4}+3x+1\right)$
-\end_inset
-
-=
-\begin_inset Formula $x^{7}+4x^{6}+5x^{4}+13x^{3}+4x^{2}+6x+2.$
-\end_inset
-
- This can be determined by using the code
-\family typewriter
-convolve([1,4,0,2], [1,0,0,3,1])
-\family default
- which returns
-\family typewriter
-[1,4,0,5,13,4,6,2].
-
-\family default
- Notice the one-to-one alignment between the elements of the arrays and
- the coefficients on powers of
-\begin_inset Formula $x$
-\end_inset
-
- in the polynomial.
-
-\end_layout
-
-\end_deeper
-\begin_layout Description
-outer
-\begin_inset LatexCommand index
-name "outer"
-
-\end_inset
-
- (a, b)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- compute an outerproduct which is syntactic sugar for a.ravel() [:,newaxis]
- * b.ravel() [newaxis,:] (after first converting a and b to ndarrays).
-\end_layout
-
-\begin_layout MyCode
->>> print outer([1,2,3],[10,100,1000])
-\newline
-[[ 10 100 1000]
-\newline
- [ 20 200 2000]
-\newline
-
- [ 30 300 3000]]
-\end_layout
-
-\begin_layout Description
-inner
-\begin_inset LatexCommand index
-name "inner"
-
-\end_inset
-
- (a, b)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Computes the inner product between two arrays.
- This is an array that has shape a.shape[:-1] + b.shape[:-1] with elements
- computed as the sum of the product of the elements from the last dimensions
- of a and b.
- In particular, let
-\begin_inset Formula $I$
-\end_inset
-
- and
-\begin_inset Formula $J$
-\end_inset
-
- be the super
-\begin_inset Foot
-status open
-
-\begin_layout Standard
-A super index is 0 or more integer indices used to index into an N-dimensional
- array.
- How many indices a super index represents should be implied by context.
-\end_layout
-
-\end_inset
-
- indices selecting the 1-dimensional arrays
-\begin_inset Formula $a[I,:]$
-\end_inset
-
- and
-\begin_inset Formula $b[J,:]$
-\end_inset
-
-, then the resulting array,
-\begin_inset Formula $r$
-\end_inset
-
-, is
-\begin_inset Formula \[
-r[I,J]=\sum_{k}a[I,k]b[J,k].\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-dot
-\begin_inset LatexCommand index
-name "dot"
-
-\end_inset
-
- (a, b)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Computes the dot (matrix) product between two arrays.
- The product-sum is over the last dimension of
-\begin_inset Formula $a$
-\end_inset
-
- and the second-to-last dimension of
-\begin_inset Formula $b$
-\end_inset
-
-.
- Specifically, if
-\begin_inset Formula $I$
-\end_inset
-
- and
-\begin_inset Formula $J$
-\end_inset
-
- are super indices for
-\begin_inset Formula $a[I,:]$
-\end_inset
-
- and
-\begin_inset Formula $b[J,:,j]$
-\end_inset
-
- so that
-\begin_inset Formula $j$
-\end_inset
-
- is the index of the last dimension of
-\begin_inset Formula $b$
-\end_inset
-
-.
- Then, the shape of the resulting array is a.shape[:-1] + b.shape[:-2] + (b.shape[-
-1],) with elements.
-
-\begin_inset Formula \[
-r[I,J,j]=\sum_{k}a[I,k]b[J,k,j],\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\begin_inset LatexCommand index
-name "vdot"
-
-\end_inset
-
-vdot (a, b)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Computes the dot product between two arrays (flattened into one-dimensional
- vectors) after conjugating the first vector.
- This is an inner-product following the physicists convention of conjugating
- the first argument.
-\begin_inset Formula \[
-r=\sum_{k}\overline{\textrm{a.flat}[k]}\textrm{b.flat}[k].\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-tensordot
-\begin_inset LatexCommand index
-name "tensordot"
-
-\end_inset
-
- (a, b, axes=(-1,0))
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Computes a dot-product between two arrays where the sum is taken over the
- axes specified by the 2-sequence which can have either scalar or sequence
- entries.
- The axes specified are summed over and the remaining axes are used to construct
- the result.
- So, for example, if
-\begin_inset Formula $a$
-\end_inset
-
- is
-\begin_inset Formula $3\times4\times5$
-\end_inset
-
- and
-\begin_inset Formula $b$
-\end_inset
-
- is
-\begin_inset Formula $4\times3\times2$
-\end_inset
-
- then if axes=([1,0],[0,1]) (or axes=([0,1],[1,0])) the result will be
-\begin_inset Formula $5\times2$
-\end_inset
-
-.
- Let
-\begin_inset Formula $I$
-\end_inset
-
- represent the indices of the un-summed axes in
-\begin_inset Formula $a$
-\end_inset
-
-, let
-\begin_inset Formula $J$
-\end_inset
-
- represent the indices of the un-summed axes in
-\begin_inset Formula $b$
-\end_inset
-
- and let
-\begin_inset Formula $K$
-\end_inset
-
- represent the the indices of the axes summed over in both
-\begin_inset Formula $a$
-\end_inset
-
- and
-\begin_inset Formula $b$
-\end_inset
-
-.
- Also, let
-\begin_inset Formula $a_{t}$
-\end_inset
-
- represent a transposed version of
-\begin_inset Formula $a$
-\end_inset
-
- where the axes to be summed over are pushed to the end, and let
-\begin_inset Formula $b_{t}$
-\end_inset
-
- represent a transposed version of
-\begin_inset Formula $b$
-\end_inset
-
- where the axes to be summed over are pushed to the front.
- Then, using
-\begin_inset Formula $\sum_{K}$
-\end_inset
-
- to represent a multi-index sum, the result can be written as
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-r[I,J]=\sum_{K}a_{t}[I,K]b_{t}[K,J]\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-cross
-\begin_inset LatexCommand index
-name "cross"
-
-\end_inset
-
- (a, b, axisa=-1, axisb=-1, axisc=-1, axis=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns the cross product of two (arrays of) vectors.
- The cross product is performed over the axes of the input arrays indicated
- by the axisa, and axisb arguments.
- For both arrays, the axis used must have dimension either 2 or 3.
- If both axes used have dimension 2, then only the z-component of the equivalent
- 3-d cross product is returned.
- Otherwise, the entire vector is returned.
- The axisc argument gives the axis of the vectors in the returned cross-product
- result.
- If axis is not None, then it is assumed that axisa=axisb=axisc=axis (regardless
- of what else is specified).
-
-\end_layout
-
-\begin_layout Description
-allclose
-\begin_inset LatexCommand index
-name "allclose"
-
-\end_inset
-
- (a, b, rtol=
-\begin_inset Formula $10^{-5}$
-\end_inset
-
-, atol=
-\begin_inset Formula $10^{-8}$
-\end_inset
-
-)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns true if all components of a and b are equal subject to the given
- relative and absolute tolerances.
- This returns true if every element of a and b satisfy
-\begin_inset Formula \[
-\left|a-b\right|<\textrm{atol}+\textrm{rtol}\left|b\right|.\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Printing arrays
-\end_layout
-
-\begin_layout Description
-array2string
-\begin_inset LatexCommand index
-name "array2string"
-
-\end_inset
-
- (a)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The default printing mechanism uses this function to produce a string from
- an array.
-
-\end_layout
-
-\begin_layout Description
-set_printoptions
-\begin_inset LatexCommand index
-name "set\\_printoptions"
-
-\end_inset
-
- (precision=None, theshold=None, edgeitems=None, linewidth=None, suppress=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Set options associated with representing an array.
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-precision the default number of digits of precision for floating point output
- (default 8);
-\end_layout
-
-\begin_layout Description
-threshold total number of array elements which triggers printing only the
-
-\begin_inset Quotes eld
-\end_inset
-
-ends
-\begin_inset Quotes erd
-\end_inset
-
- of the array rather than a full representation (default 1000);
-\end_layout
-
-\begin_layout Description
-edgeitems number of array elements in summary at beginning and end of each
- dimension (default 3);
-\end_layout
-
-\begin_layout Description
-linewidth the number of characters per line (default 75);
-\end_layout
-
-\begin_layout Description
-suppress Boolean value indicating whether or not to suppress printing of
- small floating point values using scientific notation (default False).
-\end_layout
-
-\end_deeper
-\begin_layout Description
-get_printoptions
-\begin_inset LatexCommand index
-name "get\\_printoptions"
-
-\end_inset
-
- ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns the values of precision, threshold, edgeitems, linewidth, and suppress
- that control printing of arrays.
-\end_layout
-
-\begin_layout Description
-set_string_function
-\begin_inset LatexCommand index
-name "set\\_string\\_function"
-
-\end_inset
-
- (func, repr=1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Set the function to use in response to str(array) or repr(array).
- By default this function is array2string.
- The function passed in must take an array argument and return a string.
- If func is None, then the print function is reset to a simple internal
- function.
-
-\end_layout
-
-\begin_layout Section
-Functions redundant with methods
-\end_layout
-
-\begin_layout Standard
-Several functions are available primarily for purposes of backward compatibility
- with old Numeric, and are therefore redundant.
- The functions are all simple wrappers for asarray(a).<function>(*args, **kwds),
- or are replaceable by attribute access.
- The following list documents them.
- It is not recommended that these functions be used in new programs, but
- there are no plans for removing them as in functional form they work with
- arbitrary sequences which is sometimes desirable.
- The functions that mirror methods and attributes are:
-\series bold
-take
-\series default
-
-\begin_inset LatexCommand index
-name "take"
-
-\end_inset
-
-,
-\series bold
-reshape
-\series default
-
-\begin_inset LatexCommand index
-name "reshape"
-
-\end_inset
-
-,
-\series bold
-squeeze
-\series default
-
-\begin_inset LatexCommand index
-name "squeeze"
-
-\end_inset
-
-,
-\series bold
-choose
-\series default
-
-\begin_inset LatexCommand index
-name "choose"
-
-\end_inset
-
-,
-\series bold
-repeat
-\series default
-
-\begin_inset LatexCommand index
-name "repeat"
-
-\end_inset
-
-,
-\series bold
-put
-\series default
-
-\begin_inset LatexCommand index
-name "put"
-
-\end_inset
-
-,
-\series bold
-swapaxes
-\series default
-
-\begin_inset LatexCommand index
-name "swapaxes"
-
-\end_inset
-
-,
-\series bold
-transpose
-\series default
-
-\begin_inset LatexCommand index
-name "transpose"
-
-\end_inset
-
-,
-\series bold
-real
-\series default
-
-\begin_inset LatexCommand index
-name "real"
-
-\end_inset
-
-,
-\series bold
-imag
-\series default
-
-\begin_inset LatexCommand index
-name "imag"
-
-\end_inset
-
-,
-\series bold
-sort
-\series default
-
-\begin_inset LatexCommand index
-name "sort"
-
-\end_inset
-
-,
-\series bold
-argsort
-\series default
-
-\begin_inset LatexCommand index
-name "argsort"
-
-\end_inset
-
-,
-\series bold
-amax
-\begin_inset LatexCommand index
-name "amax"
-
-\end_inset
-
-, argmax
-\series default
-
-\begin_inset LatexCommand index
-name "argmax"
-
-\end_inset
-
-,
-\series bold
-amin
-\begin_inset LatexCommand index
-name "amin"
-
-\end_inset
-
-
-\series default
-,
-\series bold
-argmin
-\series default
-
-\begin_inset LatexCommand index
-name "argmin"
-
-\end_inset
-
-,
-\series bold
-ptp
-\series default
-
-\begin_inset LatexCommand index
-name "ptp"
-
-\end_inset
-
-,
-\series bold
-alen
-\series default
-
-\begin_inset LatexCommand index
-name "alen"
-
-\end_inset
-
-,
-\series bold
-searchsorted
-\series default
-
-\begin_inset LatexCommand index
-name "searchsorted"
-
-\end_inset
-
-,
-\series bold
-diagonal
-\series default
-
-\begin_inset LatexCommand index
-name "diagonal"
-
-\end_inset
-
-,
-\series bold
-trace
-\series default
-
-\begin_inset LatexCommand index
-name "trace"
-
-\end_inset
-
-,
-\series bold
-ravel
-\series default
-
-\begin_inset LatexCommand index
-name "ravel"
-
-\end_inset
-
-,
-\series bold
-nonzero
-\series default
-
-\begin_inset LatexCommand index
-name "nonzero"
-
-\end_inset
-
-,
-\series bold
-shape
-\series default
-
-\begin_inset LatexCommand index
-name "shape"
-
-\end_inset
-
-,
-\series bold
-compress
-\series default
-
-\begin_inset LatexCommand index
-name "compress"
-
-\end_inset
-
-,
-\series bold
-clip
-\series default
-
-\begin_inset LatexCommand index
-name "clip"
-
-\end_inset
-
-,
-\series bold
-std
-\series default
-
-\begin_inset LatexCommand index
-name "std"
-
-\end_inset
-
-,
-\series bold
-var
-\series default
-
-\begin_inset LatexCommand index
-name "var"
-
-\end_inset
-
-,
-\series bold
-mean
-\series default
-
-\begin_inset LatexCommand index
-name "mean"
-
-\end_inset
-
-,
-\series bold
-sum
-\series default
-
-\begin_inset LatexCommand index
-name "sum"
-
-\end_inset
-
-,
-\series bold
-cumsum
-\series default
-
-\begin_inset LatexCommand index
-name "cumsum"
-
-\end_inset
-
-,
-\series bold
-product
-\series default
-
-\begin_inset LatexCommand index
-name "product"
-
-\end_inset
-
-,
-\series bold
-cumproduct
-\series default
-
-\begin_inset LatexCommand index
-name "cumproduct"
-
-\end_inset
-
-,
-\series bold
-sometrue
-\begin_inset LatexCommand index
-name "sometrue"
-
-\end_inset
-
-
-\series default
- (method is .any),
-\series bold
-alltrue
-\begin_inset LatexCommand index
-name "alltrue"
-
-\end_inset
-
-
-\series default
- (method is .all),
-\series bold
-around
-\begin_inset LatexCommand index
-name "around"
-
-\end_inset
-
-
-\series default
- (method is .round),
-\series bold
-rank
-\begin_inset LatexCommand index
-name "rank"
-
-\end_inset
-
-
-\series default
- (attribute is .ndim),
-\series bold
-shape
-\series default
-
-\begin_inset LatexCommand index
-name "shape"
-
-\end_inset
-
-,
-\series bold
-size
-\begin_inset LatexCommand index
-name "size"
-
-\end_inset
-
-
-\series default
- (.size or .shape[axis]), and
-\series bold
-copy
-\series default
-
-\begin_inset LatexCommand index
-name "copy"
-
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Section
-Dealing with data types
-\end_layout
-
-\begin_layout Description
-dtype (obj, align=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a data-type object from any object.
- See Chapter
-\begin_inset LatexCommand ref
-reference "cha:Data-descriptor-objects"
-
-\end_inset
-
- for a more detailed explanation of what can be interpreted as a data-type
- object and the meaning of the align keyword.
-
-\end_layout
-
-\begin_layout Description
-maximum_sctype (arg)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns the array-scalar type of highest precision of the same general
- kind as arg which can be any recognized form for describing a data-type.
-\end_layout
-
-\begin_layout Description
-issctype (obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns True if obj is an array data type (or a recognized alias for one)
-\end_layout
-
-\begin_layout Description
-obj2sctype (obj, default=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns the array type object corresponding to obj which can be an array
- type already, a python type object, an actual array, or any recognized
- alias for an array type object.
- If no suitable data type object can be determined, return default.
-\end_layout
-
-\begin_layout Description
-sctype2char (sctype)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the typecode character associated with an array-scalar type dtype.
- The first argument is first converted to a dtype if it needs to be.
-
-\end_layout
-
-\begin_layout Tip
-the type attribute of data-type objects are actual Python type objects subclasse
-d in a hierarchy of types.
- This can often be useful to check data types generically.
- For example, issubclass(dtype.type, integer) can check to see if the data
- type is one of the 10 different integer types.
- The issubclass function, however, raises an error if either argument is
- not an actual type object.
- NumPy defines _(arg1, arg2) that will return false instead of raise an
- error.
- Alternatively, dtype.kind is a character describing the class of the data-type
- so dtype.kind in 'iu' would also check to see if the data-type is an integer
- type.
-\end_layout
-
-\begin_layout Description
-can_cast (from=d1, to=d2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return Boolean value indicating whether or not data type d1 can be cast
- to data type d2 safely (without losing precision or information).
-
-\end_layout
-
-\begin_layout Chapter
-Additional Convenience Routines
-\end_layout
-
-\begin_layout Quotation
-A committee is twelve men doing the work of one.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-John F.
- Kennedy
-\end_layout
-
-\begin_layout Quotation
-Your mind can only hold one thought at a time.
- Make it a positive and constructive one.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-H.
- Jackson Brown Jr.
-
-\end_layout
-
-\begin_layout Section
-Shape functions
-\end_layout
-
-\begin_layout Description
-atleast_1d
-\begin_inset LatexCommand index
-name "atleast\\_1d"
-
-\end_inset
-
- (a1,a2,...,an)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Force a sequence of arrays (including array scalars) to each be at least
- 1-d.
-
-\end_layout
-
-\begin_layout Description
-atleast_2d
-\begin_inset LatexCommand index
-name "atleast\\_2d"
-
-\end_inset
-
- (a1,a2,...,an)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Force a sequence of arrays (including array scalars) to each be at least
- 2-d.
- Dimensions of length 1 are pre-pended to reach a two-dimensional array.
-\end_layout
-
-\begin_layout Description
-atleast_3d
-\begin_inset LatexCommand index
-name "atleast\\_3d"
-
-\end_inset
-
- (a1,a2,...,an)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Force a sequence of arrays (including array_scalars) to each be at least
- 3-d.
- Dimensions of length 1 are pre-pended to reach a two-dimensional array.
-\end_layout
-
-\begin_layout Description
-roll
-\begin_inset LatexCommand index
-name "roll"
-
-\end_inset
-
- (arr, shift, axis=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a new array with the contents of arr shifted (rolled) by the amount
- given in the integer argument shift along the axis specified.
- If axis is None, then the shift takes place in the ravelled array (but
- the returned array has the same shape as arr).
- Elements that shift outside the array are rolled back into the array from
- the opposite side.
-
-\end_layout
-
-\begin_layout Description
-rollaxis
-\begin_inset LatexCommand index
-name "rollaxis"
-
-\end_inset
-
- (arr, axis, start)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return arr transposed so that the provided axis is inserted into the shape
- before start with the other dimensions rolled.
- Thus, if arr.shape is (i,j,k,l) then rollaxis(arr, 2, 0) has shape (k,i,j,l)
- and rollaxis(arr, 1, 3) has shape (i,k,j,l).
-\end_layout
-
-\begin_layout Description
-vstack
-\begin_inset LatexCommand index
-name "vstack"
-
-\end_inset
-
- (seq)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Stack a sequence of arrays along the first axis (row wise).
- Arrays in seq must have the same shape along all dimensions but the first.
- Rebuilds array divided by vsplit.
- All 1-d arrays will be stacked row-wise.
-\end_layout
-
-\begin_layout Description
-hstack
-\begin_inset LatexCommand index
-name "hstack"
-
-\end_inset
-
- (seq)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Stack a sequence of arrays along the second axis (column wise).
- Arrays in seq must have the same shape along all dimensions but the second.
- Rebuilds array divided by hsplit.
- Notice that 1-d arrays will be appended into a new 1-d array.
- Use column_stack to get a 2-d array from 1-d arrays.
- If some arrays are already 2-d, then the 1-d arrays need to have a dimension
- added to the end (
-\emph on
-e.g.
-
-\emph default
-
-\family typewriter
-y[:,newaxis]
-\family default
-) in order to stack correctly.
-
-\end_layout
-
-\begin_layout Description
-column_stack
-\begin_inset LatexCommand index
-name "column\\_stack"
-
-\end_inset
-
- (seq)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Stack a sequence of arrays as columns into a 2-d array.
- 1-d arrays are converted to 2-d arrays and transposed.
- All arrays must have shapes so that the resulting array is well defined.
- Compare with
-\series bold
-hstack
-\series default
-.
-\end_layout
-
-\begin_layout Description
-row_stack
-\begin_inset LatexCommand index
-name "row\\_stack"
-
-\end_inset
-
- (seq)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Stack a sequence of 1-d arrays as rows into a 2-d array (alias for
-\series bold
-vstack
-\series default
-).
-
-\end_layout
-
-\begin_layout Description
-dstack
-\begin_inset LatexCommand index
-name "dstack"
-
-\end_inset
-
- (seq)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Stack a sequence of arrays along the third axis (depth wise).
- Arrays in seq must have the same shape along all dimensions but the third.
- Rebuilds array divided by vsplit.
-\end_layout
-
-\begin_layout Description
-array_split
-\begin_inset LatexCommand index
-name "array\\_split"
-
-\end_inset
-
- (ary, i_or_s, axis=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Divide ary into a list of sub-arrays along the specified axis.
- The i_or_s argument stands for indices_or_sections.
- If i_or_s is an integer, ary is divided into that many equally-sized arrays.
- If it is impossible to make an even split, each of the leading arrays in
- the returned list have one additional member.
- If i_or_s is a list of sorted integer, its entries define the indexes where
- ary is split.
- An empty list for i_or_s results in a single sub-array equal to the original
- array.
-\end_layout
-
-\begin_layout Description
-split
-\begin_inset LatexCommand index
-name "split"
-
-\end_inset
-
- (ary, i_or_s, axis=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The same as array_split() except if i_or_s is an integer and it is impossible
- to make an even split, an error is raised.
-\end_layout
-
-\begin_layout Description
-hsplit
-\begin_inset LatexCommand index
-name "hsplit"
-
-\end_inset
-
- (ary, i_or_s)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Split a single array into multiple columns of sub-arrays (along the first
- axis if 1-d or along the second second if >1-d).
- Only works on arrays of 1 or more dimension.
-
-\end_layout
-
-\begin_layout Description
-vsplit
-\begin_inset LatexCommand index
-name "vsplit"
-
-\end_inset
-
- ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Split a single array into multiple rows of sub-arrays (along the first
- axis).
- Only works on arrays of 2 or more dimensions.
-\end_layout
-
-\begin_layout Description
-dsplit
-\begin_inset LatexCommand index
-name "dsplit"
-
-\end_inset
-
- ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Split a single array into multiple sub-arrays along the third axis (depth).
- Only works on arrays of 3 or more dimensions.
-\end_layout
-
-\begin_layout Description
-apply_along_axis
-\begin_inset LatexCommand index
-name "apply\\_along\\_axis"
-
-\end_inset
-
- (func1d, axis, arr, *args)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Execute func1d(arr[sel_i], *args) where func1d takes 1-d arrays and arr
- is an N-d array, where sel_i is a selection object sufficient to select
- a 1-d sub-array along the given axis.
- The function is executed for all 1-d arrays along axis in arr.
-
-\end_layout
-
-\begin_layout Description
-apply_over_axes
-\begin_inset LatexCommand index
-name "apply\\_over\\_axes"
-
-\end_inset
-
- (func, a, axes)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- For each axis in the axes sequence, call func as
-\family typewriter
-res=func(a, axis)
-\family default
-.
- If res is the same shape as a then set
-\family typewriter
-a=res
-\family default
- and continue.
- if
-\family typewriter
-res.ndim = a.ndim -1
-\family default
-, then insert a dimension before axis and continue.
-
-\end_layout
-
-\begin_layout Description
-expand_dims
-\begin_inset LatexCommand index
-name "expand\\_dims"
-
-\end_inset
-
- (a, axis)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Expand the shape of array a by including newaxis
-\series bold
-before
-\series default
- the given axis.
-\end_layout
-
-\begin_layout Description
-resize
-\begin_inset LatexCommand index
-name "resize"
-
-\end_inset
-
- (a, new_shape)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns a new array with the specified shape which can be any size.
- The new array is filled with repeated copies of a.
- This function is similar in spirit to a.resize(new_shape) except that it
- fills in the new array with repeated copies and returns a new array.
-
-\end_layout
-
-\begin_layout Description
-kron
-\begin_inset LatexCommand index
-name "kron"
-
-\end_inset
-
- (a, b)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a composite array with blocks from
-\emph on
-b
-\emph default
- scaled by elements of
-\emph on
-a
-\emph default
-.
- The number of dimensions of
-\emph on
-a
-\emph default
- and
-\emph on
-b
-\emph default
- should be the same.
- If not, then the input with fewer dimensions is pre-pended with ones (broadcast
-) to the same shape as the input with more dimensions.
- The return array has this same number of dimensions with shape given by
- the product of the shape of
-\emph on
-a
-\emph default
- and the shape of
-\emph on
-b
-\emph default
-.
- If either a or b is a scalar then this function is equivalent to multiply(a,b).
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- For example, if
-\emph on
-a
-\emph default
- and
-\emph on
-b
-\emph default
- are is 1-d the result is
-\begin_inset Formula \[
-\left[\begin{array}{cccc}
-a[0]*b & a[1]*b & \cdots & a[-1]*b\end{array}\right]\]
-
-\end_inset
-
- while if
-\emph on
-a
-\emph default
- and
-\emph on
-b
-\emph default
- are 2-d, the result is
-\begin_inset Formula \[
-\left[\begin{array}{cccc}
-a[0,0]*b & a[0,1]*b & \cdots & a[0,-1]*b\\
-a[1,0]*b & a[1,1]*b & \cdots & a[1,-1]*b\\
-\vdots & \vdots & \ddots & \vdots\\
-a[-1,0]*b & a[-1,1]*b & \cdots & a[-1,-1]*b\end{array}\right]\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Example:
-\end_layout
-
-\end_deeper
-\begin_layout MyCode
->>> kron([1,10,100],[5,6,7])
-\newline
-array([ 5, 6, 7, 50, 60, 70, 500, 600,
- 700])
-\newline
->>> kron([[1,10],[100,1000]],[[2,3],[4,5]])
-\newline
-array([[ 2, 3, 20,
- 30],
-\newline
- [ 4, 5, 40, 50],
-\newline
- [ 200, 300, 2000, 3000],
-\newline
-
- [ 400, 500, 4000, 5000]])
-\end_layout
-
-\begin_layout Description
-tile
-\begin_inset LatexCommand index
-name "tile"
-
-\end_inset
-
- (a, reps)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Tile an
-\begin_inset Formula $N$
-\end_inset
-
--dimensional array using the shape information in reps to create a larger
-
-\begin_inset Formula $N$
-\end_inset
-
--dimensional array.
- This is equivalent to kron(ones(reps, a.dtype), a).
- The number of dimensions of a and the length of shape should be the same
- or else 1's will be pre-pended to make them the same.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Example:
-\end_layout
-
-\end_deeper
-\begin_layout MyCode
->>> tile([5,6,7],(1,2,3))
-\newline
-array([[[5, 6, 7, 5, 6, 7, 5, 6, 7],
-\newline
- [5,
- 6, 7, 5, 6, 7, 5, 6, 7]]])
-\end_layout
-
-\begin_layout Section
-Basic functions
-\end_layout
-
-\begin_layout Description
-average
-\begin_inset LatexCommand index
-name "average"
-
-\end_inset
-
- (a, axis=None, weights=None, returned=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Computes the average along the indicated axis.
- If axis is None, average over the entire array.
- Inputs can be integer or floating types; result is type float.
- If weights are given, the result is sum(a*weights)/sum(weights).
- Therefore, weights must have shape equal to a.shape or be 1-d with length
- a.shape[axis].
- Integer weights are converted to float.
- If returned is True, then return a tuple showing both the result and the
- sum of the weights (or count of the values).
- The shape of these two results will be the same.
-
-\end_layout
-
-\begin_layout Description
-cov
-\begin_inset LatexCommand index
-name "cov"
-
-\end_inset
-
- (x, y=None, rowvar=1, bias=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Compute the covariance matrix of data in x.
- If x is a vector and y is None, then this function is equivalent to asarray(x).v
-ar().
- Otherwise, x is interpreted as observations of several random variables.
- If rowvar is True (default), then the variables are in the rows and the
- observations of the variables are in the columns.
- Otherwise, the variables are in the columns and the observations are in
- the rows.
- If y is given then it is treated as another variable or set of variables
- to be added to x.
- By default, a so-called unbiased estimate of the covariance matrix is made.
- If bias is non-zero, then a biased normalization factor (with better mean-squar
-e error performance) is used instead.
- If
-\begin_inset Formula $\mathbf{X}$
-\end_inset
-
- is a random vector, then the covariance matrix is defined as
-\begin_inset Formula \[
-\mathbf{C}=E\left[\left(\mathbf{X}-E\mathbf{X}\right)\left(\mathbf{X}-E\mathbf{X}\right)^{H}\right].\]
-
-\end_inset
-
- It can be approximated as
-\begin_inset Formula \[
-\mathbf{C}\approx\frac{1}{P}\sum_{i=0}^{N-1}\left(\mathbf{x}_{i}-\bar{\mathbf{x}}\right)\left(\mathbf{x}_{i}-\bar{\mathbf{x}}\right)^{H}\]
-
-\end_inset
-
- where
-\begin_inset Formula $\mathbf{x}_{i}$
-\end_inset
-
- is an observation of
-\begin_inset Formula $\mathbf{X}$
-\end_inset
-
- (as a column-vector),
-\begin_inset Formula $N$
-\end_inset
-
- is the number of observations made and
-\begin_inset Formula $P=N-1$
-\end_inset
-
- for an unbiased estimate or
-\begin_inset Formula $P=N$
-\end_inset
-
- for a biased (but lower mean-squared error) estimate.
-
-\end_layout
-
-\begin_layout Description
-corrcoef
-\begin_inset LatexCommand index
-name "corrcoef"
-
-\end_inset
-
- (x, y=None, rowvar=1, bias=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Estimate the correlation coefficient of x.
- By default, each row of x contains a random variable with observations
- of the random variable in the columns of x.
- (If rowvar is False, the each column is a random variable with observations
- in the rows).
- The y argument can be used to append additional variables to x.
- The
-\begin_inset Formula $i^{\textrm{th}}$
-\end_inset
-
- row and
-\begin_inset Formula $j^{\textrm{th}}$
-\end_inset
-
- column of the correlation coefficient matrix is defined as
-\begin_inset Formula \[
-\rho_{ij}=\frac{C_{ij}}{\sqrt{C_{ii}C_{jj}}}\]
-
-\end_inset
-
- where
-\begin_inset Formula $\mathbf{C}$
-\end_inset
-
- is the covariance matrix.
- The rowvar and bias arguments are passed on to the cov function to estimate
-
-\begin_inset Formula $\mathbf{C}.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-msort
-\begin_inset LatexCommand index
-name "msort"
-
-\end_inset
-
- (a)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a new array, sorted along the first axis.
- Equivalent to b=a.copy(); b.sort(0)
-\end_layout
-
-\begin_layout Description
-median
-\begin_inset LatexCommand index
-name "median"
-
-\end_inset
-
- (m)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns the median of m along its first dimension.
-\end_layout
-
-\begin_layout Description
-bincount
-\begin_inset LatexCommand index
-name "bincount"
-
-\end_inset
-
- (list=, weights=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The list argument is a 1-d integer array.
- Let
-\begin_inset Formula $r$
-\end_inset
-
- be the returned 1-d array whose length is (list.max()+1).
- If weights is None, then
-\begin_inset Formula $r[i]$
-\end_inset
-
- is the number of occurrences of
-\begin_inset Formula $i$
-\end_inset
-
- in list.
- If weight is present, then the
-\begin_inset Formula $i^{\textrm{th}}$
-\end_inset
-
- element is
-\begin_inset Formula \[
-r[i]=\sum_{j:\textrm{list}\left[j\right]=i}\textrm{weights}[j].\]
-
-\end_inset
-
- Notice that if weights is None, it is equivalent to a weights array of
- all 1.
- The length of weights must be the same as the length of list.
-
-\end_layout
-
-\begin_layout Description
-digitize
-\begin_inset LatexCommand index
-name "digitize"
-
-\end_inset
-
- (x=,bins=)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an array of integers the same length as x with values
-\begin_inset Formula $i$
-\end_inset
-
- such that
-\begin_inset Formula $\textrm{bins}\left[i-1\right]\leq x<\textrm{bins}\left[i\right]$
-\end_inset
-
- if bins is monotonically increasing, or
-\begin_inset Formula $\textrm{bins}[i]\leq x<\textrm{bins}[i-1]$
-\end_inset
-
- if bins is monotonically decreasing.
- When
-\begin_inset Formula $x$
-\end_inset
-
- is beyond the bounds of bins, return either
-\begin_inset Formula $i=0$
-\end_inset
-
- or
-\begin_inset Formula $i=$
-\end_inset
-
-len(bins) as appropriate.
-\end_layout
-
-\begin_layout Description
-histogram
-\begin_inset LatexCommand index
-name "histogram"
-
-\end_inset
-
- (x=, bins=None, range=None, normed=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct a histogram for the data in x (treated as one-dimensional array
- of type float).
- If bins is not a sequence, then bins should be the number of bins which
- will be constructed ranging from range[0] to range[1] or x.min() to x.max()
- if range is None.
- If normed is True, then the histogram will be normalized and comparable
- with a probability density function, otherwise it will be a count of the
- number of items in each bin.
- The return value is the tuple (n, bins) where n is the histogram.
-\end_layout
-
-\begin_layout Description
-histogram2d
-\begin_inset LatexCommand index
-name "histogram2d"
-
-\end_inset
-
- (x, y, bins=10, range=None, normed=False)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Compute the two-dimensional histogram for a dataset (x,y) given the bins.
- Returns (histogram, xedges, yedges).
- The bins argument can be either the number of bins or a sequence of the
- bin edges if the x and y directions should have the same bins.
- If the bins argument is a sequence of length 2, then separate bin edges
- will be computed.
- The first element can be either the number of bins or the bin edges for
- the x-direction.
- The second element is interpreted as the number of bins or the bin edges
- for the y-direction.
- The returned histogram array, H, is a count of the number of samples in
- each bin.
- The array is oriented such that H[i,j] is the number of samples falling
- into binx[j] and biny[i] (notice the association x<->j and y<->i).
- Setting normed to True returns a density rather than a bin-count.
- The range argument allows specifying lower and upper bin edges (in a sequence
- of length 2 with 2-length sequences in each entry).
- The default is [[x.min(), x.max()],[y.min(), y.max()]].
-
-\end_layout
-
-\begin_layout Description
-histogramdd
-\begin_inset LatexCommand index
-name "histogramdd"
-
-\end_inset
-
- (sample, bins=10, range=None, normed=False)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Compute the
-\begin_inset Formula $D$
-\end_inset
-
--dimensional histogram for a (vector) dataset contained in sample give the
- bins.
- The dataset is a sequence of
-\begin_inset Formula $D$
-\end_inset
-
- arrays or an
-\begin_inset Formula $N\times D$
-\end_inset
-
- array where
-\begin_inset Formula $N$
-\end_inset
-
- is the number of samples and
-\begin_inset Formula $D$
-\end_inset
-
- is the number of dimensions.
- Returns (histogram, edges) where histogram is a
-\begin_inset Formula $D$
-\end_inset
-
--dimensional array of shape given by the number of bins selected in each
- axis containing the number of counts that a point in the sample data fell
- into the volume bin specified.
- The edges sequence has
-\begin_inset Formula $D$
-\end_inset
-
--entries to specify the edge boundaries for each dimension.
- The bins argument is a sequence of edge arrays or a sequence of the number
- of bins.
- If a scalar is given, it is assumed to be the number of bins for all dimensions.
- The range is a length-
-\begin_inset Formula $D$
-\end_inset
-
- sequence containing lower and upper bin edges which default to the min
- and maximum of the respective datasets.
- If normed is True, then a density rather than a bin-count is returned.
-
-\end_layout
-
-\begin_layout Description
-logspace
-\begin_inset LatexCommand index
-name "logspace"
-
-\end_inset
-
- (start, stop, num=50, endpoint=True,base=10.0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Evenly spaced samples on a logarithmic scale.
- Returns num evenly spaced (in logspace) samples from base**start to base**stop.
- If endpoint is True, then the last sample is base**stop.
-\end_layout
-
-\begin_layout Description
-linspace
-\begin_inset LatexCommand index
-name "linspace"
-
-\end_inset
-
- (start, stop, num=50, endpoint=True, retstep=False):
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Evenly spaced samples.
- Returns num evenly spaced samples from start to stop.
- If endpoint is True, then the last sample is stop.
- If retstep is True, then return the computed step size.
-\end_layout
-
-\begin_layout Description
-meshgrid
-\begin_inset LatexCommand index
-name "meshgrid"
-
-\end_inset
-
- (x, y)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- For 1-d arrays x, y with lengths Nx=len(x) and Ny = len(y), return X, Y
- where X and Y are (Ny, Nx) shaped arrays with the elements of x and y repeated
- to fill the array.
-
-\end_layout
-
-\begin_layout MyCode
->>> X,Y = meshgrid([1,2,3], [4,5,6,7]); print X; print Y
-\newline
-[[1 2 3]
-\newline
- [1 2 3]
-\newline
-
- [1 2 3]
-\newline
- [1 2 3]]
-\newline
-[[4 4 4]
-\newline
- [5 5 5]
-\newline
- [6 6 6]
-\newline
- [7 7 7]]
-\end_layout
-
-\begin_layout Description
-select
-\begin_inset LatexCommand index
-name "select"
-
-\end_inset
-
- (condlist, choicelist, default=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns an array comprised from different elements of choicelist depending
- on the list of conditions.
- The condlist argument is a list of Boolean condition arrays.
- The choicelist argument is a list of choice arrays (of the same size as
- the arrays in condlist).
- The result has the same size as the arrays in choicelist.
- If condlist is [
-\begin_inset Formula $c_{0},\ldots,c_{N-1}$
-\end_inset
-
-], then choicelist must be of length
-\begin_inset Formula $N$
-\end_inset
-
-.
- The elements of choicelist can then be represented as [
-\begin_inset Formula $v_{0},\ldots,v_{N-1}$
-\end_inset
-
-].
- The default choice if none of the conditions are met is given as the default
- argument.
- The conditions are tested in order and the first one satisfied is used
- to select the choice.
- In other words, the elements of the output array are found from the following
- tree (evaluated on an element-by-element basis)
-\end_layout
-
-\begin_layout LyX-Code
-
-\series bold
-if
-\series default
-
-\begin_inset Formula $c_{0}$
-\end_inset
-
-:
-\begin_inset Formula $v_{0}$
-\end_inset
-
-
-\newline
-
-\series bold
-elif
-\series default
-
-\begin_inset Formula $c_{1}$
-\end_inset
-
-:
-\begin_inset Formula $v_{1}$
-\end_inset
-
-
-\newline
-...
-\newline
-
-\series bold
-elif
-\series default
-
-\begin_inset Formula $c_{N-1}$
-\end_inset
-
-:
-\begin_inset Formula $v_{N-1}$
-\end_inset
-
-
-\newline
-
-\series bold
-else
-\series default
-: default
-\end_layout
-
-\begin_layout Description
-piecewise
-\begin_inset LatexCommand index
-name "piecewise"
-
-\end_inset
-
- (x, condlist, funclist, *args, **kw)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Compute a piecewise-defined function.
- A piecewise defined function is
-\begin_inset Formula \[
-f\left(x\right)=\left\{ \begin{array}{cc}
-f_{1}\left(x\right) & x\in S_{1},\\
-f_{2}\left(x\right) & x\in S_{2},\\
-\vdots & \vdots\\
-f_{n}\left(x\right) & x\in S_{n}.\end{array}\right.\]
-
-\end_inset
-
-where
-\begin_inset Formula $S_{1}$
-\end_inset
-
- are sets.
- Thus, the function is defined differently over different sub-domains of
- the input.
- Such a function can be computed using
-\family typewriter
-select
-\family default
- but such an implementation means calling each
-\begin_inset Formula $f_{i}$
-\end_inset
-
- over the entire region of
-\begin_inset Formula $x.$
-\end_inset
-
- The piecewise call guarantees that each function
-\begin_inset Formula $f_{i}$
-\end_inset
-
- will only be called over those values of
-\begin_inset Formula $x$
-\end_inset
-
- in
-\begin_inset Formula $S_{i}.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Arguments: x is the array of values over which to call the function; condlist
- is a sequence of Boolean (indicator) arrays (or a single Boolean array)
- of the same shape as
-\begin_inset Formula $x$
-\end_inset
-
- that defines the sets (True indicates that element of
-\begin_inset Formula $x$
-\end_inset
-
- is in the set).
- If needed, to match the length of funclist, an
-\begin_inset Quotes eld
-\end_inset
-
-otherwise
-\begin_inset Quotes erd
-\end_inset
-
- set will be added to condlist.
- This otherwise set is defined as
-\begin_inset Formula $S_{n}=\overline{\bigcup S_{i}}.$
-\end_inset
-
- The argument funclist is a list of functions to be called (or items to
- be inserted) corresponding to the conditions.
- Each of these functions can take extra arguments and key-word arguments
- which are passed in as *args, and **kw using standard Python syntax.
- Each of these functions should return vector output for vector input.
- If the function is a scalar, then it will simply be inserted where appropriate
- into the output.
- It is the equivalent of a constant function.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Example: Suppose we want to compute
-\begin_inset Formula $f\left(x\right)=x^{2}\Pi\left(\frac{x}{3}\right)+u\left(x-5\right)$
-\end_inset
-
- where
-\begin_inset Formula $\Pi\left(x\right)=1$
-\end_inset
-
- only when
-\begin_inset Formula $\left|x\right|\leq1$
-\end_inset
-
- and
-\begin_inset Formula $u\left(x\right)=1$
-\end_inset
-
- only when
-\begin_inset Formula $x\geq0.$
-\end_inset
-
- This could be done using the code:
-\end_layout
-
-\end_deeper
-\begin_layout MyCode
->>> f1 = lambda x: x*x
-\newline
->>> x = r_[-4:6:20j]
-\newline
->>> y = piecewise(x,abs(x)<=3,[f1,0])+
-piecewise(x,x>=0,[1,0])
-\newline
->>> set_printoptions(precision=4); print y
-\newline
-[ 0.
- 0.
- 8.687 5.8615 3.59 1.8726 0.7091 0.0997
-\newline
- 1.0443 1.5429 2.5956 4.2022
- 6.3629 9.0776 1.
- 1.
- 1.
-\newline
- 1.
- 1.
- 1.
- ]
-\end_layout
-
-\begin_layout Description
-trim_zeros
-\begin_inset LatexCommand index
-name "trim\\_zeros"
-
-\end_inset
-
- (filt, trim='fb'):
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Trim the leading ('f' in trim) and trailing ('b' in trim) zeros from a
- sequence according to the trim keyword.
-
-\end_layout
-
-\begin_layout Description
-trapz
-\begin_inset LatexCommand index
-name "trapz"
-
-\end_inset
-
- (y, x=None, dx=1.0, axis=-1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- If
-\begin_inset Formula $\mathbf{y}$
-\end_inset
-
- contains samples of a function:
-\begin_inset Formula $y_{i}=f\left(x_{i}\right)$
-\end_inset
-
- then trapz can be used to approximate the integral of the function using
- the trapezoidal rule.
- If the sampling is not evenly spaced use
-\begin_inset Formula $\mathbf{x}$
-\end_inset
-
- to pass in the sample positions.
- Otherwise, only the sample-spacing is needed in dx.
- The trapz function can work with many functions at a time stored in an
-
-\begin_inset Formula $N$
-\end_inset
-
--dimensional array.
- The axis argument controls which axis defines the sampling axis (the other
- dimensions are different functions).
- The number of dimensions of the returned result is
-\begin_inset Formula $y$
-\end_inset
-
-.ndim - 1.
-\end_layout
-
-\begin_layout Description
-diff
-\begin_inset LatexCommand index
-name "diff"
-
-\end_inset
-
- (x, n=1, axis=-1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Calculates the
-\begin_inset Formula $n^{\textrm{th}}$
-\end_inset
-
- order, discrete difference along the given axis.
-\end_layout
-
-\begin_layout Description
-gradient
-\begin_inset LatexCommand index
-name "gradient"
-
-\end_inset
-
- (f, *varargs)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Calculate the gradient of an N-d scalar function, f.
- Uses central differences on the interior and first differences on boundaries
- to give the same shape for each component of the gradient.
- The varargs variable can contain 0, 1, or N scalars corresponding to the
- sample distances in each direction (default 1.0).
- If f is N-d, then N arrays are returned each of the same shape as f, giving
- the derivative of f with respect to each dimension.
-
-\end_layout
-
-\begin_layout Description
-angle
-\begin_inset LatexCommand index
-name "angle"
-
-\end_inset
-
- (z, deg=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the angle of a complex number z (in degrees if deg is True).
-\end_layout
-
-\begin_layout Description
-unwrap
-\begin_inset LatexCommand index
-name "unwrap"
-
-\end_inset
-
- (p, discont=pi, axis=-1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Unwraps radian phase p by changing absolute jumps greater than discont
- to their
-\begin_inset Formula $2\pi$
-\end_inset
-
- complement along the given axis.
-
-\end_layout
-
-\begin_layout Description
-sort_complex
-\begin_inset LatexCommand index
-name "sort\\_complex"
-
-\end_inset
-
- (x)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This is syntactic sugar for asarray(x).sort().astype(<cmplx_type>) where
- cmplx_type is csingle if x.dtype is integral with fewer bits than intp,
- clongfloat if x.dtype.type is longfloat, and cdouble for all other types.
- The sorting is done by comparing the real part of the array, and then the
- imaginary part if the real parts are the same.
-
-\end_layout
-
-\begin_layout Description
-disp
-\begin_inset LatexCommand index
-name "disp"
-
-\end_inset
-
- (mesg, device=None, linefeed=1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Display a message to device (defaults to sys.stdout) with or without a closing
- linefeed.
-\end_layout
-
-\begin_layout Description
-unique
-\begin_inset LatexCommand index
-name "unique"
-
-\end_inset
-
- (seq)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns unique items in the 1-dimensional seq.
-\end_layout
-
-\begin_layout Description
-extract
-\begin_inset LatexCommand index
-name "extract"
-
-\end_inset
-
- (condition, arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equivalent to arr.compress(condition.flat) and arr.flat[bool_(condition.flat)]
- which extracts the elements of (flattened) arr according to the elements
- of (flattened) condition that are True.
-
-\end_layout
-
-\begin_layout Description
-place
-\begin_inset LatexCommand index
-name "place"
-
-\end_inset
-
- (arr, mask, vals)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Inverse of extract.
- Equivalent to arr[abool(mask)] = vals but it uses a different algorithm.
-
-\end_layout
-
-\begin_layout Description
-delete
-\begin_inset LatexCommand index
-name "delete"
-
-\end_inset
-
- (arr, indices, axis=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a new array with the sub-arrays indicated by indices along axis
- removed.
- If axis is None, then first ravel the array and set axis to -1.
- The indices argument describes which sub-arrays along the given axis should
- be removed.
- It can be an integer, a slice object, or a sequence of integers.
- A new array is created with the corresponding sub-arrays are removed.
-
-\end_layout
-
-\begin_layout Description
-insert
-\begin_inset LatexCommand index
-name "insert"
-
-\end_inset
-
- (arr, indices, values, axis=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Create a new array with values inserted into arr before indices.
- If axis is None, then first ravel the array and set axis to -1.
- The indices argument describes which indices along the provided axis the
- values should be inserted before.
- It can be an integer, a slice object, or a sequence of integers.
- The values argument must be broadcastable to the shape implied by where
- they will be inserted.
-
-\end_layout
-
-\begin_layout Description
-append
-\begin_inset LatexCommand index
-name "append"
-
-\end_inset
-
- (arr, values, axis=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a new array with values appended to the end of the array along axis.
-
-\end_layout
-
-\begin_layout Description
-nansum
-\begin_inset LatexCommand index
-name "nansum"
-
-\end_inset
-
- (x, axis=None)
-\end_layout
-
-\begin_layout Description
-nanmax
-\begin_inset LatexCommand index
-name "nanmax"
-
-\end_inset
-
- (x, axis=None)
-\end_layout
-
-\begin_layout Description
-nanargmax
-\begin_inset LatexCommand index
-name "nanargmax"
-
-\end_inset
-
- (x, axis=None)
-\end_layout
-
-\begin_layout Description
-nanargmin
-\begin_inset LatexCommand index
-name "nanargmin"
-
-\end_inset
-
- (x, axis=None)
-\end_layout
-
-\begin_layout Description
-nanmin
-\begin_inset LatexCommand index
-name "nanmin"
-
-\end_inset
-
- (x, axis=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- These functions perform their respective operations over the given axis
- (or the entire array if axis is None), after replacing any nans with appropriat
-e values so as not to affect the calculation.
-
-\end_layout
-
-\begin_layout Description
-vectorize
-\begin_inset LatexCommand index
-name "vectorize"
-
-\end_inset
-
- (pyfunc, otypes=None, doc=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This creates a class whose instances have a call method that invokes a
- ufunc that has been dynamically built to call the python function pyfunc
- internally.
- The output types can be controlled by the otypes argument.
- If it is None, then the output types will be determined upon first call
- to the function using the provided inputs.
- This can be reset, by re-setting the otypes attribute to
-\begin_inset Quotes eld
-\end_inset
-
-
-\begin_inset Quotes erd
-\end_inset
-
-.
- The normal rules of array broadcasting are followed by the returned object.
-\end_layout
-
-\begin_layout MyCode
->>> def myfunc(a,b):
-\newline
-...
- if (a>b): return a
-\newline
-...
- else: return b-1
-\newline
->>> vecfunc = vectorize(myfunc)
-\newline
->>> vecfunc([[1,2,3],[5,6,9]
-],[7,4,5])
-\newline
-array([[6, 3, 4],
-\newline
- [6, 6, 9]])
-\end_layout
-
-\begin_layout Description
-asarray_chkfinite
-\begin_inset LatexCommand index
-name "asarray\\_chkfinite"
-
-\end_inset
-
- (x)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Like asarray(x) except an error is raised if any of the values in x are
- not finite.
-
-\end_layout
-
-\begin_layout Description
-round_
-\begin_inset LatexCommand index
-name "round\\_"
-
-\end_inset
-
- (x, decimals=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an array with all the elements of x rounded to decimals places.
- Returns x if array is not floating point and rounds both the real and imaginary
- parts separately if array is complex.
- Rounds in the same way as standard python except for half-way values are
- rounded to the nearest
-\emph on
-even
-\emph default
- number.
-\end_layout
-
-\begin_layout Description
-packbits (array, axis=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Pack an integer array of logical data (zero/non-zero) into bits of a uint8
- data-type along the dimension given by axis.
- This dimension is shrunk by a factor of 8 (rounded up).
- Each element in the input is converted to a bit in the output which is
- set to 1 or 0 depending on whether the input is non-zero or not.
- Thus, every 8-element chunk of the input is converted to a single byte
- in the output.
- If axis is None, then the bit-packing is done on the entire array as if
- it were raveled.
-\end_layout
-
-\begin_layout Description
-unpackbits (array, axis=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Unpack bits of an array of uint8 data-type into a single uint8 byte for
- each bit along the dimension given by axis.
- This dimension is thus expanded 8-fold, but otherwise the output has the
- same shape as the input.
- If axis is None, then the input is treated as a 1-d array and expanded
- 8-fold so that each bit of the input is given an output byte.
-
-\end_layout
-
-\begin_layout Description
-add_docstring
-\begin_inset LatexCommand index
-name "add\\_docstring"
-
-\end_inset
-
- (obj, doc)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Adds a docstring to a built-in object, obj, that does not have a docstring
- defined already.
- The obj can be a built-in function-or-method, a typeobject, a method descriptor
-, a getset descriptor, or a member descriptor.
- This is useful for improving the documentation of objects defined in C-compiled
- code without re-compiling.
- If the object already has a docstring, a RuntimeError is raised.
- If the object is not a supported type the code can add a docstring to,
- a TypeError is raised.
-
-\end_layout
-
-\begin_layout Description
-add_newdoc
-\begin_inset LatexCommand index
-name "add\\_newdoc"
-
-\end_inset
-
- (place, obj, doc)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Adds a docstring to the
-\emph on
-obj
-\emph default
- imported from
-\emph on
-place
-\emph default
- using exec 'from %s import %s' % (place, obj).
- Thus, both place and obj should be strings.
- If doc is a string, then a single docstring is added to obj from place.
- If doc is a 2-tuple, then obj must be an object with attributes that need
- to be commented.
- The first element of the doc tuple is the attribute to be commented on
- and the second element is the actual docstring.
- If doc is a list, then it must be composed of elements that are 2-tuples
- indicating that obj has several attributes that need to be documented.
-
-\end_layout
-
-\begin_layout Section
-Polynomial functions
-\end_layout
-
-\begin_layout Standard
-There are two interfaces for dealing with polynomials
-\begin_inset LatexCommand index
-name "polynomials"
-
-\end_inset
-
-: a class-based interface, and a collection of functions to deal with a
- polynomials represented as a simple list of coefficients.
- This latter representation results from the is a one-to-one correspondence
- between a length-
-\begin_inset Formula $\left(n+1\right)$
-\end_inset
-
- sequence of coefficients
-\begin_inset Formula $a_{n}\equiv a[n]$
-\end_inset
-
- and an
-\begin_inset Formula $n^{\textrm{th}}$
-\end_inset
-
- order polynomial:
-\begin_inset Formula \[
-p\left(x\right)=a_{0}x^{n}+a_{1}x^{n-1}+\cdots+a_{n-1}x+a_{n}.\]
-
-\end_inset
-
- Most of the functions below operate on and return a simple sequence of
- coefficients representing a polynomial.
- There is, however, a simple polynomial class that provides some utility
- for doing simple algebra on polynomials.
-
-\end_layout
-
-\begin_layout Description
-poly1d
-\begin_inset LatexCommand index
-name "poly1d"
-
-\end_inset
-
- (c_or_r, r=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This construction returns an instance of a simple polynomial class.
- It can take either a list of coefficients on polynomial powers, or a sequence
- of roots (if r=1).
- The returned polynomial can be added, subtracted, multiplied, divided,
- and taken to integer powers, resulting in new polynomials.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-.r roots of the polynomial
-\end_layout
-
-\begin_layout Description
-.o order of the polynomial
-\end_layout
-
-\begin_layout Description
-.c polynomial coefficients as an array (also
-\series bold
-__array__()
-\series default
- )
-\end_layout
-
-\begin_layout Description
-__call__(x) evaluate the polynomial at x (can be an array)
-\end_layout
-
-\begin_layout Description
-__getitem__(x) p[k] returns the coefficient on the kth power of x (backwards
- from indexing the coefficient array)
-\end_layout
-
-\end_deeper
-\begin_layout MyCode
->>> p=poly1d([2,5,7])
-\newline
->>> print p
-\newline
-2
-\newline
-2 x + 5 x + 7
-\newline
->>> print p*[1,3,1]
-\newline
-4
- 3 2
-\newline
-2 x + 11 x + 24 x + 26 x + 7
-\newline
->>> print p([0.5,0.6,3])
-\newline
-[ 10.
- 10.72 40.
- ]
-\newline
->>> print p.r
-\newline
-[-1.25+1.3919j -1.25-1.3919j]
-\end_layout
-
-\begin_layout Description
-poly
-\begin_inset LatexCommand index
-name "poly"
-
-\end_inset
-
- (roots_or_matrix)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a sequence of coefficients representing a polynomial given the sequence
- of roots as an argument.
- Alternatively, if the argument is a 2-d array, then return the characteristic
- polynomial of the matrix.
-
-\end_layout
-
-\begin_layout Description
-roots
-\begin_inset LatexCommand index
-name "roots"
-
-\end_inset
-
- (poly)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the roots of the polynomial represented by coefficients in poly
-\end_layout
-
-\begin_layout Description
-polyint
-\begin_inset LatexCommand index
-name "polyint"
-
-\end_inset
-
- (poly, m=1, k=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an exact
-\begin_inset Formula $m^{\textrm{th}}$
-\end_inset
-
--order integral of the polynomial represented in poly.
- If k is None, then use 0 for the integrating constants.
- Otherwise, use the scalars in the sequence k as integrating constants.
- Also available as .integ (m=1,k=0) method of poly1d objects.
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Example:
-\begin_inset Formula \begin{eqnarray*}
-p\left(x\right) & = & x^{2}+3x+4\\
-\int\int p\left(x\right) & = & \frac{1}{12}x^{4}+\frac{1}{2}x^{3}+2x^{2}+k_{0}x+k_{1}\end{eqnarray*}
-
-\end_inset
-
-
-\end_layout
-
-\end_deeper
-\begin_layout MyCode
->>> print polyint([1,3,4],m=2,k=[5,3])
-\newline
-[ 0.0833 0.5 2.
- 5.
- 3.
- ]
-\end_layout
-
-\begin_layout Description
-polyder
-\begin_inset LatexCommand index
-name "polyder"
-
-\end_inset
-
- (poly, m)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an exact
-\begin_inset Formula $m^{\textrm{th}}$
-\end_inset
-
--order derivative of the polynomial represented in poly.
- Also available as .deriv(m=1) method of poly1d objects.
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Example:
-\begin_inset Formula \begin{eqnarray*}
-p\left(x\right) & = & x^{3}+2x^{2}+4x+3\\
-\frac{dp}{dx}\left(x\right) & = & 3x^{2}+4x+4\end{eqnarray*}
-
-\end_inset
-
-
-\end_layout
-
-\end_deeper
-\begin_layout MyCode
->>> polyder([1,2,4,3])
-\newline
-array([3, 4, 4])
-\end_layout
-
-\begin_layout Description
-polyadd
-\begin_inset LatexCommand index
-name "polyadd"
-
-\end_inset
-
- (p1, p2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Add the two polynomials represented by coefficients:
-\begin_inset Formula $p_{1}\left(x\right)+p_{2}\left(x\right)$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-polysub
-\begin_inset LatexCommand index
-name "polysub"
-
-\end_inset
-
- (p1, p2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return coefficients for the polynomial found by subtracting the two polynomials
- represented by
-\begin_inset Formula $p_{1}$
-\end_inset
-
- and
-\begin_inset Formula $p_{2}$
-\end_inset
-
-:
-\begin_inset Formula $p_{1}\left(x\right)-p_{2}\left(x\right)$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-polymul
-\begin_inset LatexCommand index
-name "polymul"
-
-\end_inset
-
- (p1, p2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the coefficients for
-\begin_inset Formula $p_{1}\left(x\right)p_{2}\left(x\right)$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-polydiv
-\begin_inset LatexCommand index
-name "polydiv"
-
-\end_inset
-
- (p1, p2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the quotient,
-\begin_inset Formula $q\left(x\right)$
-\end_inset
-
-, and remainder,
-\begin_inset Formula $r\left(x\right)$
-\end_inset
-
-, so that
-\begin_inset Formula $p_{1}\left(x\right)=q\left(x\right)p_{2}\left(x\right)+r\left(x\right),$
-\end_inset
-
- with the order of
-\begin_inset Formula $r\left(x\right)$
-\end_inset
-
- less than the order of
-\begin_inset Formula $p_{2}\left(x\right).$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-polyval
-\begin_inset LatexCommand index
-name "polyval"
-
-\end_inset
-
- (p, y)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Evaluate the polynomial
-\begin_inset Formula $p$
-\end_inset
-
- at
-\begin_inset Formula $y$
-\end_inset
-
-.
- The argument,
-\begin_inset Formula $y$
-\end_inset
-
-, can be a number or an array or a polynomial object.
- If x is a polynomial object, then polyval performs polynomial composition:
-
-\begin_inset Formula $p\left(y\left(x\right)\right),$
-\end_inset
-
- otherwise polyval computes the value of the polynomial at each
-\begin_inset Formula $y$
-\end_inset
-
-.
- Uses Horner's rule for evaluation, but this can still lead to numerical
- instabilities for wildly fluctuating coefficients.
-\end_layout
-
-\begin_layout Description
-polyfit
-\begin_inset LatexCommand index
-name "polyfit"
-
-\end_inset
-
- (x,y,N)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Compute a best-fit polynomial in
-\begin_inset Formula $x$
-\end_inset
-
- of order
-\begin_inset Formula $N$
-\end_inset
-
-, to the data,
-\begin_inset Formula $y$
-\end_inset
-
-, in the sense of minimizing averaged-squared error between the measurement
- and the model.
- Useful for quick line-fitting
-\begin_inset LatexCommand index
-name "fitting"
-
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Section
-Set Operations
-\end_layout
-
-\begin_layout Standard
-The set operations
-\begin_inset LatexCommand index
-name "set operations|("
-
-\end_inset
-
- were kindly contributed by Robert Cimrman.
- These set operations are based on sorting functions and all expect 1-d
- sequences with unique elements with the exception of unique1d and intersect1d_n
-u which will flatten N-d nested-sequences to 1-d arrays and can handle non-uniqu
-e elements.
-
-\end_layout
-
-\begin_layout Description
-unique1d
-\begin_inset LatexCommand index
-name "unique1d"
-
-\end_inset
-
- (arr, retindx=False)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the unique elements of arr as a 1-d array.
- If retindx is True, then also return the indices, ind, such that arr.flat[ind]
- is the set of unique values.
-\end_layout
-
-\begin_layout Description
-intersect1d
-\begin_inset LatexCommand index
-name "intersect1d"
-
-\end_inset
-
- (a1, a2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the (sorted) intersection of a1 and a2 which is an array containing
- the elements of a1 that are also in a2.
-
-\end_layout
-
-\begin_layout Description
-intersect1d_nu
-\begin_inset LatexCommand index
-name "intersect1d\\_nu"
-
-\end_inset
-
- (a1, a2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the (sorted) intersection of a1 and a2 but allow a1 and a2 to be
- N-d arrays with non-unique elements.
- Equivalent to intersect1d(unique1d(a1), unique1d(a2)).
-
-\end_layout
-
-\begin_layout Description
-union1d
-\begin_inset LatexCommand index
-name "union1d"
-
-\end_inset
-
- (a1, a2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the (sorted) union of a1 and a2 which is an array containing elements
- that are in either a1 or a2.
-
-\end_layout
-
-\begin_layout Description
-setdiff1d
-\begin_inset LatexCommand index
-name "setdiff1d"
-
-\end_inset
-
- (a1, a2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the set-difference of a1 and a2 which is an array containing the
- elements of a1 that are
-\series bold
-not
-\series default
- in a2.
-\end_layout
-
-\begin_layout Description
-setxor1d
-\begin_inset LatexCommand index
-name "setxor1d"
-
-\end_inset
-
- (a1, a2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the (sorted) set containing the exclusive-or of the arrays a1 and
- a2.
- The exclusive-or contains elements that are in a1 or in a2 as long as the
- element is not in both a1 and a2.
-
-\end_layout
-
-\begin_layout Description
-setmember1d
-\begin_inset LatexCommand index
-name "setmember1d"
-
-\end_inset
-
- (tocheck, set)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a Boolean 1-d array of the length of tocheck which is True whenever
- that element is contained in set and false when it is not.
- Equivalent
-\begin_inset LatexCommand index
-name "set operations|)"
-
-\end_inset
-
- to array([x in set for x in tocheck]).
-\end_layout
-
-\begin_layout Section
-Array construction using index tricks
-\end_layout
-
-\begin_layout Standard
-The functions and classes in this category make it simpler to construct
- arrays.
-
-\end_layout
-
-\begin_layout Description
-ix_
-\begin_inset LatexCommand index
-name "ix\\_"
-
-\end_inset
-
- (*args)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This indexing cross function is useful for forming indexing arrays necessary
- to select out the cross-product of
-\begin_inset Formula $N$
-\end_inset
-
- 1-dimensional arrays.
- Note that the default indexing does not do a cross-product (which might
- be unexpected for someone coming from other programming environments).
- The default indexing is more general purpose.
- Using the ix_ constructor can produce the indexing arrays necessary to
- select a cross-product.
-\end_layout
-
-\begin_layout Description
-mgrid [index expression]
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This is an instance of a class.
- It can be used to construct a filled
-\begin_inset Quotes eld
-\end_inset
-
-mesh-grid
-\begin_inset Quotes erd
-\end_inset
-
- using slicing syntax.
-
-\end_layout
-
-\begin_layout Description
-ogrid [index expression]
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This is similar to mgrid except it returns an open grid, so as to save
- space and time.
- The broadcasting rules will ensure that any universal function operating
- on the grid will act as if the ogrid had been the result of mgrid.
-\end_layout
-
-\begin_layout Description
-r_
-\begin_inset LatexCommand index
-name "r\\_"
-
-\end_inset
-
- [index expression]
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This is a simple way to build up arrays quickly.
- There are two use cases.
- 1) If the index expression contains comma separated arrays, then stack
- them along their first axis.
- 2) If the index expression contains slice notation or scalars then create
- a 1-d array with a range indicated by the slice notation.
- In other-words the slice syntax start:stop:step is equivalent to arange(start,
- stop, step) inside of the brackets.
- However, if step is an imaginary number (i.e.
- 100j) then its integer portion is interpreted as a number-of-points desired
- and the start and stop are inclusive.
- In other words start:stop:step
-\family typewriter
-j
-\family default
- is interpreted as linspace(start, stop, step, endpoint=1) inside of the
- brackets.
- After expansion of slice notation, all comma separated sequences are concatenat
-ed together.
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Optional character strings placed as the first element of the index expression
- can be used to change the output.
- The strings 'r' or 'c' result in matrix output.
- If the result is 1-d and 'r' is specified a
-\begin_inset Formula $1\times N$
-\end_inset
-
- (row) matrix is produced.
- If the result is 1-d and 'c' is specified, then a
-\begin_inset Formula $N\times1$
-\end_inset
-
- (column) matrix is produced.
- If the result is 2-d then both provide the same matrix result.
-
-\end_layout
-
-\begin_layout MyCode
->>> print r_[-1:1:9j,[0]*10,5,6]
-\newline
-[-1.
- -0.75 -0.5 -0.25 0.
- 0.25 0.5 0.75 1.
- 0.
- 0.
-\newline
- 0.
- 0.
- 0.
- 0.
- 0.
- 0.
- 0.
- 0.
- 5.
- 6.
- ]
-\newline
->>> print r_['r',1,2,5,6]
-\newline
-[[1 2 5 6]]
-\newline
->>> print r_['c',1,2,5,6]
-\newline
-[[1]
-\newline
- [2]
-\newline
-
- [5]
-\newline
- [6]]
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A string integer specifies which axis to stack multiple comma separated
- arrays along.
-
-\end_layout
-
-\begin_layout MyCode
->>> a=arange(6).reshape(2,3)
-\newline
->>> r_[a,a]
-\newline
-array([[0, 1, 2],
-\newline
- [3, 4, 5],
-\newline
-
- [0, 1, 2],
-\newline
- [3, 4, 5]])
-\newline
->>> r_['-1',a,a]
-\newline
-array([[0, 1, 2, 0, 1,
- 2],
-\newline
- [3, 4, 5, 3, 4, 5]])
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A string of two comma-separated integers allows indication of the minimum
- number of dimensions to force each entry into as the second integer (the
- axis to concatenate along is still the first integer).
-
-\end_layout
-
-\begin_layout MyCode
->>> r_['0,2',[1,2,3],[4,5,6]]
-\newline
-array([[1, 2, 3],
-\newline
- [4, 5, 6]])
-\newline
->>> r_['1,2',[1,
-2,3],[4,5,6]]
-\newline
-array([[1, 2, 3, 4, 5, 6]])
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A string with three comma-separated integers allows specification of the
- axis to concatenate along, the minimum number of dimensions to force the
- entries to, and which axis should contain the start of the arrays which
- are less than the specified number of dimensions.
- In other words the third integer allows you to specify where the the 1's
- should be placed in the shape of the arrays that have their shapes upgraded.
- By default, they are placed in the front of the shape tuple.
- The third argument allows you to specify where the start of the array should
- be instead.
- Thus, a third argument of '0' would place the 1's at the end of the array
- shape.
- Negative integers specify where in the new shape tuple the last dimension
- of upgraded arrays should be placed, so the default is '-1'.
-\end_layout
-
-\begin_layout MyCode
->>> r_['0,2,0', [1,2,3], [4,5,6]]
-\newline
-array([[1],
-\newline
- [2],
-\newline
- [3],
-\newline
-
- [4],
-\newline
- [5],
-\newline
- [6]])
-\newline
->>> r_['1,2,0', [1,2,3], [4,5,6]]
-\newline
-array([[1,
- 4],
-\newline
- [2, 5],
-\newline
- [3, 6]])
-\end_layout
-
-\begin_layout Description
-c_
-\begin_inset LatexCommand index
-name "c\\_"
-
-\end_inset
-
- [index_expression]
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This is short-hand for r_['-1,2,0', index_expression] useful because of
- its common occurence.
- In particular, arrays will be stacked along their last axis after being
- upgraded to at least 2-d with 1's post-pended to the shape (column vectors
- made out of 1-d arrays).
-
-\end_layout
-
-\begin_layout Section
-Other indexing devices
-\end_layout
-
-\begin_layout Description
-index_exp
-\begin_inset LatexCommand index
-name "index\\_exp"
-
-\end_inset
-
- [index expression]
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a tuple of Python objects that implements the index expression and
- can be modified and placed in any other index expression.
-
-\end_layout
-
-\begin_layout MyCode
->>> index_exp[2:5,...,4,::-1]
-\newline
-(slice(2, 5, None), Ellipsis, 4, slice(None, None,
- -1))
-\end_layout
-
-\begin_layout Description
-s_
-\begin_inset LatexCommand index
-name "s\\_"
-
-\end_inset
-
- [index expression]
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Translate index expressions into the equivalent Python objects.
- This is similar to index_expression except a tuple is not always returned.
- For example:
-\end_layout
-
-\begin_layout MyCode
->>> s_[1:10]
-\newline
-slice(1, 10, None)
-\newline
->>> s_[1:10,-3:4:0.5]
-\newline
-(slice(1, 10, None), slice(-3,
- 4, 0.5))
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This provides a standard way to construct index expressions to pass to
- functions and methods because Python does not allow slice expressions anywhere
- except for inside brackets.
-
-\end_layout
-
-\begin_layout Description
-ndindex
-\begin_inset LatexCommand index
-name "ndindex"
-
-\end_inset
-
- (*seq)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A sequence of
-\begin_inset Formula $N$
-\end_inset
-
- integers are passed in as separate arguments.
- These integers are used as the upper boundaries of an
-\begin_inset Formula $N$
-\end_inset
-
--dimensional counter that starts at 0.
- The object returned is an iterator that implements the counter.
-\end_layout
-
-\begin_layout MyCode
->>> for index in ndindex(3,3,2):
-\newline
-...
- print index,
-\newline
-(0, 0, 0) (0, 0, 1) (0, 1, 0) (0, 1, 1) (0, 2, 0) (0, 2,
- 1) (1, 0, 0) (1, 0, 1) (1, 1, 0) (1, 1, 1) (1, 2, 0) (1, 2, 1) (2, 0, 0)
- (2, 0, 1) (2, 1, 0) (2, 1, 1) (2, 2, 0) (2, 2, 1)
-\end_layout
-
-\begin_layout Description
-unravel_index
-\begin_inset LatexCommand index
-name "unravel\\_index"
-
-\end_inset
-
- (indx, dims)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Convert a flat index, indx, into an index tuple for an array of the given
- shape.
- Keep in mind that it may be more convenient to use indx with a.flat, then
- to unravel the index.
-\end_layout
-
-\begin_layout Section
-Two-dimensional functions
-\end_layout
-
-\begin_layout Standard
-These functions all deal with or return two dimensional arrays.
-\end_layout
-
-\begin_layout Description
-eye
-\begin_inset LatexCommand index
-name "eye"
-
-\end_inset
-
- (
-\begin_inset Formula $N$
-\end_inset
-
-,
-\begin_inset Formula $M$
-\end_inset
-
-=None,
-\begin_inset Formula $k$
-\end_inset
-
-=0, dtype=float)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an
-\begin_inset Formula $N\times M$
-\end_inset
-
- array of the given type with ones down the
-\begin_inset Formula $k^{\textrm{th}}$
-\end_inset
-
- diagonal.
- If
-\begin_inset Formula $M$
-\end_inset
-
- is None, it defaults to
-\begin_inset Formula $N$
-\end_inset
-
-.
- Alternatively, if
-\begin_inset Formula $M$
-\end_inset
-
- is a valid data type, then it becomes the data-type used.
-
-\end_layout
-
-\begin_layout Description
-vander
-\begin_inset LatexCommand index
-name "vander"
-
-\end_inset
-
- (
-\begin_inset Formula $x$
-\end_inset
-
-,
-\begin_inset Formula $N$
-\end_inset
-
-=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The Vandermonde matrix of vector,
-\begin_inset Formula $x$
-\end_inset
-
-.
- The
-\begin_inset Formula $i^{\textrm{th}}$
-\end_inset
-
- column of the return matrix is the
-\begin_inset Formula $m_{i}^{\textrm{th}}$
-\end_inset
-
- power of
-\begin_inset Formula $x$
-\end_inset
-
- where
-\begin_inset Formula $m_{i}=N-i-1$
-\end_inset
-
-.
- If
-\begin_inset Formula $N$
-\end_inset
-
- is None, it defaults to the length of
-\begin_inset Formula $x$
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout MyCode
->>> vander([1,2,3,4,5],3)
-\newline
-array([[ 1, 1, 1],
-\newline
- [ 4, 2, 1],
-\newline
-
- [ 9, 3, 1],
-\newline
- [16, 4, 1],
-\newline
- [25, 5, 1]])
-\end_layout
-
-\begin_layout Description
-diag
-\begin_inset LatexCommand index
-name "diag"
-
-\end_inset
-
- (
-\begin_inset Formula $v$
-\end_inset
-
-,
-\begin_inset Formula $k$
-\end_inset
-
-=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the
-\begin_inset Formula $k^{\textrm{th}}$
-\end_inset
-
- diagonal if
-\begin_inset Formula $v$
-\end_inset
-
- is a 2-d array, or returns an array with
-\begin_inset Formula $v$
-\end_inset
-
- as the
-\begin_inset Formula $k^{\textrm{th}}$
-\end_inset
-
- diagonal if
-\begin_inset Formula $v$
-\end_inset
-
- is a 1-d array.
-
-\end_layout
-
-\begin_layout MyCode
->>> diag(arange(12).reshape(4,3),k=1)
-\newline
-array([1, 5])
-\newline
->>> diag([1,4,5,7],k=-1)
-\newline
-array([
-[0, 0, 0, 0, 0],
-\newline
- [1, 0, 0, 0, 0],
-\newline
- [0, 4, 0, 0, 0],
-\newline
- [0,
- 0, 5, 0, 0],
-\newline
- [0, 0, 0, 7, 0]])
-\end_layout
-
-\begin_layout Description
-diagflat
-\begin_inset LatexCommand index
-name "diagflat"
-
-\end_inset
-
- (
-\begin_inset Formula $v$
-\end_inset
-
-,
-\begin_inset Formula $k$
-\end_inset
-
-=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a 2-d array (of the same class as
-\begin_inset Formula $v$
-\end_inset
-
-) by placing a flattened version of
-\begin_inset Formula $v$
-\end_inset
-
- along the
-\begin_inset Formula $k^{\textrm{th}}$
-\end_inset
-
- diagonal.
- This differs from diag in that it only creates 2-d arrays and will work
- with any object that can be converted to an array (returning that object
- if it also defines an __array_wrap__ method).
-
-\end_layout
-
-\begin_layout Description
-fliplr
-\begin_inset LatexCommand index
-name "fliplr"
-
-\end_inset
-
- (m)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the array, m, with rows preserved and columns reversed in the left-right
- direction.
- For m.ndim > 2, this works on the first two dimensions (equivalent to m[:,::-1])
-\end_layout
-
-\begin_layout Description
-flipud
-\begin_inset LatexCommand index
-name "flipud"
-
-\end_inset
-
- (m)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the array, m, with columns preserved and rows reversed in the up-down
- direction.
- For m.ndim > 1, this works on the first dimension (equivalent to m[::-1])
-\end_layout
-
-\begin_layout Description
-rot90
-\begin_inset LatexCommand index
-name "rot90"
-
-\end_inset
-
- (m, k=1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Rotate the first two dimensions of an array, m, by k*90 degrees in the
- counterclockwise direction.
- Must have m.ndim >=2.
-\end_layout
-
-\begin_layout Description
-tri
-\begin_inset LatexCommand index
-name "tri"
-
-\end_inset
-
- (
-\begin_inset Formula $N$
-\end_inset
-
-,
-\begin_inset Formula $M$
-\end_inset
-
-=
-\begin_inset Formula $N$
-\end_inset
-
-, k=0, dtype=aint)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct an
-\begin_inset Formula $N\times M$
-\end_inset
-
- array where all the diagonals starting from the lower left corner up to
- the
-\begin_inset Formula $\textrm{k}^{\textrm{th}}$
-\end_inset
-
- diagonal are all ones.
-
-\end_layout
-
-\begin_layout Description
-triu
-\begin_inset LatexCommand index
-name "triu"
-
-\end_inset
-
- (m, k=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a upper-triangular 2-d array from m with all the elements below
- the
-\begin_inset Formula $\textrm{k}^{\textrm{th}}$
-\end_inset
-
- diagonal set to 0.
-
-\end_layout
-
-\begin_layout Description
-tril
-\begin_inset LatexCommand index
-name "tril"
-
-\end_inset
-
- (m, k=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a lower-triangular 2-d array from m with all the elements above
- the
-\begin_inset Formula $\textrm{k}^{\textrm{th}}$
-\end_inset
-
- diagonal set to 0.
-
-\end_layout
-
-\begin_layout Description
-mat
-\begin_inset LatexCommand index
-name "mat"
-
-\end_inset
-
- (data, dtype=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct a matrix from data.
- Alias for numpy.asmatrix.
- The calling syntax is the same as that function.
- Note that data can be a string in which case the routine uses spaces and
- semi-colons to construct the matrix:
-\end_layout
-
-\begin_layout MyCode
->>> mat('1 3 4; 5 6 9')
-\newline
-matrix([[1, 3, 4],
-\newline
- [5, 6, 9]])
-\end_layout
-
-\begin_layout Description
-bmat
-\begin_inset LatexCommand index
-name "bmat"
-
-\end_inset
-
- (obj, ldict=None, gdict=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Build a matrix from sub-blocks.
- This is similar to mat, except the items in the nested-sequence, or string,
- should be appropriately shaped 2-d arrays.
- If obj is a string, then ldict and gdict can be used to alter where the
- names represented in the string are found (default is current local and
- global namespace).
-
-\end_layout
-
-\begin_layout MyCode
->>> A=mat('1 2; 3 4'); B=mat('5 6; 7 8')
-\newline
->>> bmat('A, B; B, A')
-\newline
-matrix([[1,
- 2, 5, 6],
-\newline
- [3, 4, 7, 8],
-\newline
- [5, 6, 1, 2],
-\newline
- [7, 8, 3, 4]])
-\end_layout
-
-\begin_layout Section
-More data type functions
-\end_layout
-
-\begin_layout Description
-issubclass_
-\begin_inset LatexCommand index
-name "issubclass\\_"
-
-\end_inset
-
- (arg1, arg2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns True if arg1 is a sub-class of arg2, otherwise returns False.
- Similar to the built-in issubclass except it does not raise an error if
- arg1 or arg2 are not types.
-
-\end_layout
-
-\begin_layout Description
-issubdtype
-\begin_inset LatexCommand index
-name "issubdtype"
-
-\end_inset
-
- (arg1, arg2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns True if the type-object of the data-type represented by arg1 is
- a sub class of the type-object of the data-type represented by arg2.
-\end_layout
-
-\begin_layout Description
-iscomplexobj
-\begin_inset LatexCommand index
-name "iscomplexobj"
-
-\end_inset
-
- (obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a single True or False value depending on whether or not obj would
- be interpreted as an array with complex-valued data type.
-\end_layout
-
-\begin_layout Description
-isrealobj
-\begin_inset LatexCommand index
-name "isrealobj"
-
-\end_inset
-
- (obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a single True or False value depending on whether or not obj would
- be interpreted as an array with real-valued data type.
-\end_layout
-
-\begin_layout Description
-isscalar
-\begin_inset LatexCommand index
-name "isscalar"
-
-\end_inset
-
- (obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- True if obj is a scalar (an instance of an array data type, or a standard
- Python scalar type).
- There is also a sequence of called ScalarType defined in NumPy, so that
- this can also be tested as type(obj) in numpy.ScalarType.
-
-\end_layout
-
-\begin_layout Description
-nan_to_num
-\begin_inset LatexCommand index
-name "nan\\_to\\_num"
-
-\end_inset
-
- (arr)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns an array with non-finite numbers changed to finite numbers.
- The mapping converts
-\family typewriter
-nan
-\family default
- to 0,
-\family typewriter
-inf
-\family default
- to the maximum value for the data type and
-\family typewriter
--inf
-\family default
- to the minimum value for the data type.
-\end_layout
-
-\begin_layout Description
-real_if_close
-\begin_inset LatexCommand index
-name "real\\_if\\_close"
-
-\end_inset
-
- (arr, tol=100)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a real arr if arr is complex with imaginary parts less than some
- tolerance.
- If tol > 1, then it represents a multiplicative factor on the value of
- epsilon for the data type of arr.
-\end_layout
-
-\begin_layout Description
-cast
-\begin_inset LatexCommand index
-name "cast"
-
-\end_inset
-
- [dtype_or_alias] (obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Cast obj to an array of the given type.
- This is equivalent to array(obj, copy=0).astype(dtype_or_alias).
- When one type is cast to another in this fashion, a very low-level operation
- takes place.
- Typically, you get what your C-compiler produces for the cast, but notice
- that in the case of casting to a bool type, the value becomes either a
- 0 or a 1.
-
-\end_layout
-
-\begin_layout MyCode
->>> cast[bool]([1,2,0,4,0]).astype(int)
-\newline
-array([1, 1, 0, 1, 0])
-\end_layout
-
-\begin_layout Description
-asfarray
-\begin_inset LatexCommand index
-name "asfarray"
-
-\end_inset
-
- (a, dtype=float)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an array of inexact data type (floating or complexfloating).
-
-\end_layout
-
-\begin_layout Description
-mintypecode
-\begin_inset LatexCommand index
-name "mintypecode"
-
-\end_inset
-
- (typechars, typeset='GDFgdf', default='d')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a minimum data type character from typeset that handles all given
- typechars.
- The returned type character must correspond to the data type of the smallest
- size such that an array of the returned type can handle the data from an
- array of type t for each t in typechars.
- If the typechars does not intersect with the typeset, then default is returned.
- If an element of typechars is not a string, then t=asarray(t).dtypechar
- is applied.
-\end_layout
-
-\begin_layout Description
-finfo
-\begin_inset LatexCommand index
-name "finfo"
-
-\end_inset
-
- (dtype)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This class allows exploration of the details of how a floating point number
- is represented in the computer.
- It can be instantiated by an inexact data type object (or an alias for
- one).
- Complex-valued data types are acceptable and are equivalent to their real-value
-d counterparts.
- The attributes of the class are
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-nmant The number of bits in the floating point mantissa, or fraction.
-\end_layout
-
-\begin_layout Description
-nexp The number of bits in the floating point exponent
-\end_layout
-
-\begin_layout Description
-machep Exponent of the smallest (most negative) power of 2 that when added
- to 1.0 gives something different than 1.0.
-
-\end_layout
-
-\begin_layout Description
-eps Floating point precision: 2**machep.
-\end_layout
-
-\begin_layout Description
-precision Number of decimal digits of precision: int(-log10(eps))
-\end_layout
-
-\begin_layout Description
-resolution 10**(-precision)
-\end_layout
-
-\begin_layout Description
-negep Exponent of the smallest power of 2 that, subtracted from 1.0, gives
- something different than 1.0.
-\end_layout
-
-\begin_layout Description
-epsneg Floating point precision: 2**negep.
-\end_layout
-
-\begin_layout Description
-minexp Smallest (most negative) power of 2 producing
-\begin_inset Quotes eld
-\end_inset
-
-normal
-\begin_inset Quotes erd
-\end_inset
-
- numbers (no leading zeros in the mantissa).
-
-\end_layout
-
-\begin_layout Description
-tiny The smallest (in magnitude) usable floating point number equal to 2**minexp.
-\end_layout
-
-\begin_layout Description
-maxexp Smallest (positive) power of 2 that causes overflow.
-\end_layout
-
-\begin_layout Description
-max The largest usable floating value: (1-epsneg)* (2**maxep)
-\end_layout
-
-\begin_layout Description
-min The most negative usable floating value: -max
-\end_layout
-
-\end_deeper
-\begin_layout Description
-\InsetSpace ~
- The most useful attributes are probably eps, max, min, and tiny.
-\end_layout
-
-\begin_layout Section
-Functions that behave like ufuncs
-\end_layout
-
-\begin_layout Standard
-These functions are Python functions built on top of universal functions
- (ufuncs) and also take optional output arguments.
- They broadcast like ufuncs but do not have ufunc attributes.
-\end_layout
-
-\begin_layout Description
-fix
-\begin_inset LatexCommand index
-name "fix"
-
-\end_inset
-
- (x, y=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Round x to the nearest integer towards zero.
-\end_layout
-
-\begin_layout Description
-isneginf
-\begin_inset LatexCommand index
-name "isneginf"
-
-\end_inset
-
- (x, y=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- True if
-\begin_inset Formula $x=-\infty$
-\end_inset
-
-.
- Should be the same as
-\family typewriter
-x==NumPy.NINF
-\family default
-.
-\end_layout
-
-\begin_layout Description
-isposinf
-\begin_inset LatexCommand index
-name "isposinf"
-
-\end_inset
-
- (x, y=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- True if
-\begin_inset Formula $x=+\infty.$
-\end_inset
-
- Should be the same as
-\family typewriter
-x==NumPy.PINF
-\family default
-.
-\end_layout
-
-\begin_layout Description
-log2
-\begin_inset LatexCommand index
-name "log2"
-
-\end_inset
-
- (x, y=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Compute the logarithm to the base 2 of
-\begin_inset Formula $x.$
-\end_inset
-
- An optional output array may be provided.
-\end_layout
-
-\begin_layout Section
-Miscellaneous Functions
-\end_layout
-
-\begin_layout Standard
-Some miscellaneous functions are available in NumPy which are included largely
- for compatibility with MLab of the old Numeric package.
- One notable difference, however, is that due to a separate implementation
- of the modified Bessel function, the kaiser window is available without
- needing a separate library.
-
-\end_layout
-
-\begin_layout Description
-sinc
-\begin_inset LatexCommand index
-name "sinc"
-
-\end_inset
-
- (
-\begin_inset Formula $x$
-\end_inset
-
-)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Compute the sinc function for
-\begin_inset Formula $x$
-\end_inset
-
- which can be a scalar or array.
- The sinc is defined as
-\begin_inset Formula $y=\textrm{sinc}\left(x\right)=\frac{\sin\left(\pi x\right)}{\pi x}$
-\end_inset
-
- with the caveat that the limiting value (1.0) of the ratio is taken for
-
-\begin_inset Formula $x=0.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-i0
-\begin_inset LatexCommand index
-name "i0"
-
-\end_inset
-
- (
-\begin_inset Formula $x$
-\end_inset
-
-)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Modified Bessel function of the first kind of order 0.
- Needed to compute the kaiser window.
- The modified Bessel function is defined as
-\begin_inset Formula \[
-I_{0}\left(x\right)=\frac{1}{\pi}\int_{0}^{\pi}e^{x\cos\theta}d\theta=\sum_{k=0}^{\infty}\frac{x^{2k}}{4^{k}\left(k!\right)^{2}}.\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-blackman
-\begin_inset LatexCommand index
-name "blackman"
-
-\end_inset
-
- (
-\begin_inset Formula $M$
-\end_inset
-
-)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct an
-\begin_inset Formula $M$
-\end_inset
-
--point Blackman smoothing window which is sequence of length
-\begin_inset Formula $M$
-\end_inset
-
- with values given for
-\begin_inset Formula $n=0\ldots M-1$
-\end_inset
-
- by
-\begin_inset Formula \[
-w\left[n\right]=0.42-0.5\cos\left(2\pi\frac{n}{M-1}\right)+0.08\cos\left(4\pi\frac{n}{M-1}\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-bartlett
-\begin_inset LatexCommand index
-name "bartlett"
-
-\end_inset
-
- (
-\begin_inset Formula $M$
-\end_inset
-
-)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct an
-\begin_inset Formula $M$
-\end_inset
-
--point Bartlett (triangular) smoothing window as
-\begin_inset Formula \[
-w\left[n\right]=\left\{ \begin{array}{cc}
-2\frac{n}{M-1} & 0\leq n\leq\frac{M-1}{2},\\
-2-2\frac{n}{M-1} & \frac{M-1}{2}<n\leq M-1.\end{array}\right.\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-hanning
-\begin_inset LatexCommand index
-name "hanning"
-
-\end_inset
-
- (
-\begin_inset Formula $M$
-\end_inset
-
-)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct an
-\begin_inset Formula $M$
-\end_inset
-
--point Hanning smoothing window defined as
-\begin_inset Formula \[
-w\left[n\right]=\frac{1}{2}-\frac{1}{2}\cos\left(2\pi\frac{n}{M-1}\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-hamming
-\begin_inset LatexCommand index
-name "hamming"
-
-\end_inset
-
- (
-\begin_inset Formula $M$
-\end_inset
-
-)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct an
-\begin_inset Formula $M$
-\end_inset
-
--point Hamming smoothing window defined for
-\begin_inset Formula $n=0\ldots M-1$
-\end_inset
-
- as
-\begin_inset Formula \[
-w\left[n\right]=0.54-0.46\cos\left(2\pi\frac{n}{M-1}\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- All of the windowing functions are smoothing windows that attempt to balance
- the inherent trade off between side-lobe height (ringing) and main-lobe
- width (resolution) in the frequency domain.
- A rectangular window has the smallest main-lobe width but the largest side-lobe
- height.
- A windowing (tapering) function tries to can help trade off main-lobe width
- By sacrificing a little in resolution using a windowing function These
- windows can be used to smooth data using the convolve function.
- Figure
-\begin_inset LatexCommand ref
-reference "cap:window functions"
-
-\end_inset
-
- shows the windowing functions described so far and their time- and frequency-do
-main behavior.
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset Float figure
-wide false
-sideways false
-status open
-
-\begin_layout Standard
-\begin_inset Graphics
- filename Figures/fig1.eps
- lyxscale 48
- width 49line%
- keepAspectRatio
-
-\end_inset
-
-
-\hfill
-
-\begin_inset Graphics
- filename Figures/fig2.eps
- lyxscale 48
- width 49line%
- keepAspectRatio
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset Caption
-
-\begin_layout Standard
-\begin_inset LatexCommand label
-name "cap:window functions"
-
-\end_inset
-
-Blackman, Bartlett, Hanning, and Hamming windows in the time and frequency
- domain showing the trade-off between main-lobe width and side-lobe height
- (Figures made with matplotlib).
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The trade-off between main-lobe and side-lobe has been studied extensively.
- Solutions that maximize energy in the main-lobe compared to energy in the
- side-lobes can be found by finding an eigenvector which can be expensive
- to compute for large window sizes.
- A good approximation to these prolate-spheroidal windows is the Kaiser
- window.
-
-\end_layout
-
-\begin_layout Description
-kaiser
-\begin_inset LatexCommand index
-name "kaiser"
-
-\end_inset
-
- (
-\begin_inset Formula $M$
-\end_inset
-
-,
-\begin_inset Formula $\beta$
-\end_inset
-
-)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct an
-\begin_inset Formula $M$
-\end_inset
-
--point Kaiser smoothing window.
- The
-\begin_inset Formula $\beta$
-\end_inset
-
- parameter controls the width of the window (and the frequency-domain side-lobe
- height and main-lobe width).
- The window is defined as
-\begin_inset Formula \[
-w\left[n\right]=\frac{1}{I_{0}\left(\beta\right)}I_{0}\left(\beta\sqrt{1-\frac{\left(2n-M-1\right)^{2}}{\left(M-1\right)^{2}}}\right).\]
-
-\end_inset
-
- There is an empirical relationship between
-\begin_inset Formula $\beta$
-\end_inset
-
- and the side-lobe height which can be used in FIR filter design.
- To achieve a side-lobe height of
-\begin_inset Formula $-\alpha$
-\end_inset
-
-dB, the
-\begin_inset Formula $\beta$
-\end_inset
-
- parameter is
-\begin_inset Formula \[
-\beta=\left\{ \begin{array}{cc}
-0.1002\left(\alpha-8.7\right) & \alpha>50,\\
-0.5842\left(\alpha-21\right)^{0.4}+0.07886\left(\alpha-21\right) & 21\leq\alpha\leq50,\\
-0 & \alpha<21.\end{array}\right.\]
-
-\end_inset
-
- The length
-\begin_inset Formula $M$
-\end_inset
-
- of the window determines the transition width.
- To obtain a transition width of
-\begin_inset Formula $\Delta\omega$
-\end_inset
-
-rad/s the window-length must be at least:
-\begin_inset Formula \[
-M=\frac{\alpha-8}{2.285\Delta\omega}+1.\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Utility functions
-\end_layout
-
-\begin_layout Description
-set_numeric_ops
-\begin_inset LatexCommand index
-name "set\\_numeric\\_ops"
-
-\end_inset
-
- (<op1>=func1, <op2>=func2, ...)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This function can be used to alter the operations used for internal array
- calculations and array special methods.
- Replaceable operations (and possible entries for <opN>) are add, subtract,
- multiply, divide, remainder, power, sqrt, negative, absolute, invert, left_shif
-t, right_shift, bitwise_and, bitwise_or, less, less_equal, equal, not_equal,
- greater, greater_equal, floor_divide, true_divide, logical_or, logical_and,
- floor, ceil, maximum, and minimum.
- The example code below changes, then restores, the old Numeric behavior
- of remainder (which was changed because it was not consistent with Python).
-
-\end_layout
-
-\begin_layout MyCode
->>> a = array([-3.,-2,-1,0,1,2,3])
-\newline
->>> print a % -2.1
-\newline
-[-0.9 -2.
- -1.
- 0.
- -1.1 -0.1 -1.2]
-\newline
->>> oldops = set_numeric_ops(remainder=fmod)
-\newline
->>> print a %
- -2.1
-\newline
-[-0.9 -2.
- -1.
- 0.
- 1.
- 2.
- 0.9]
-\newline
->>> newops = set_numeric_ops(**oldops)
-\newline
->>> print a % -2.1
-\newline
-[-0.9 -2.
- -1.
- 0.
- -1.1 -0.1 -1.2]
-\newline
->>> print 3 % -2.1 # comparison
-\newline
--1.2
-\end_layout
-
-\begin_layout Description
-get_include
-\begin_inset LatexCommand index
-name "get\\_include"
-
-\end_inset
-
- ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the directory that contains the numpy include files.
- The numpy.distutils automatically includes this directory in building extensions.
-
-\end_layout
-
-\begin_layout Description
-get_numarray_include
-\begin_inset LatexCommand index
-name "get\\_numarray\\_include"
-
-\end_inset
-
- (type=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the directory that contains the numarray compatible C-API include
- files.
- If type is not None, then return a list containing both the numarray compatible
- C-API include files and the numpy include files.
- The latter form is only needed when building an extension without the use
- of numpy.distutils.
-
-\end_layout
-
-\begin_layout Description
-deprecate
-\begin_inset LatexCommand index
-name "deprecate"
-
-\end_inset
-
- (func, oldname, newname)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a deprecated function named 'oldname' that has been replaced by
- 'newname'.
- This new deprecated function issues a warning before calling the old function.
- The name and docs of the function are also updated to be oldname instead
- of the name that func has.
- Example usage.
- If you want to deprecate the function named 'old' in favor of a new function
- named 'new' which has the same calling conention then this could be done
- with the assignment
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-old = deprecate(new, 'old', 'new')
-\end_layout
-
-\end_deeper
-\begin_layout Chapter
-Scalar objects
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand label
-name "cha:Scalar-objects"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Quotation
-Never worry about numbers.
- Help one person at a time, and always start with the person nearest you.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Mother Teresa
-\end_layout
-
-\begin_layout Quotation
-A great many people think they are thinking when they are merely rearranging
- their prejudices.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-William James
-\end_layout
-
-\begin_layout Standard
-One
-\begin_inset LatexCommand index
-name "array scalars|("
-
-\end_inset
-
- important new feature of NumPy is the addition of a new scalar object for
- each of the 21 different data types that an array can have.
- Do not confuse these scalar objects with the data-type objects.
- There is one data-type object.
- It contains a
-\family typewriter
-.type
-\family default
- attribute which points to the Python type that each element of the array
- will be returned as
-\begin_inset Foot
-status open
-
-\begin_layout Standard
-with the exception of object data-types which return the underlying object
- and not a
-\begin_inset Quotes eld
-\end_inset
-
-scalar
-\begin_inset Quotes erd
-\end_inset
-
- type.
-
-\end_layout
-
-\end_inset
-
-.
- The built-in data-types point have .
-\family typewriter
-type
-\family default
- attributes that point to these scalar objects.
- Five (or six) of these new scalar objects are essentially equivalent to
- fundamental Python types and therefore inherit from them as well as from
- the generic array scalar type.
- The bool_ data type is very similar to the Python BooleanType but does
- not inherit from it because Python's BooleanType does not allow itself
- to be inherited from, and on the C-level the size of the actual bool_ data
- is not the same as a Python Boolean scalar.
- Table
-\begin_inset LatexCommand ref
-reference "cap:Array-scalar-types"
-
-\end_inset
-
- shows which array scalars inherit from basic Python types.
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset Float table
-wide false
-sideways false
-status open
-
-\begin_layout Standard
-\begin_inset Caption
-
-\begin_layout Standard
-\begin_inset LatexCommand label
-name "cap:Array-scalar-types"
-
-\end_inset
-
-Array scalar types that inherit from basic Python types.
- The intc array data type might also inherit from the IntType if it has
- the same number of bits as the int_ array data type on your platform.
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\align center
-\begin_inset Tabular
-<lyxtabular version="3" rows="6" columns="2">
-<features>
-<column alignment="center" valignment="top" leftline="true" width="0">
-<column alignment="center" valignment="top" leftline="true" rightline="true" width="0">
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-array data type
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Python type
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-int_
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-IntType
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-float_
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-FloatType
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-complex_
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-ComplexType
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-str_
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-StringType
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-unicode_
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-UnicodeType
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-The array scalars have the same attributes and methods as arrays and live
- in a hierarchy of scalar types so they can be easily classified based on
- their type objects.
- However, because array scalars are immutable, and attributes change intrinsic
- properties of the object, the
-\series bold
-array scalar attributes are not settable
-\series default
-.
-\end_layout
-
-\begin_layout Standard
-Array scalars can be detected using the hierarchy of data types.
- For example,
-\family typewriter
-isinstance(val, generic)
-\family default
- will return True if val is an array scalar object.
- Alternatively, what kind of array scalar is present can be determined using
- other members of the data type hierarchy.
- Thus, for example
-\family typewriter
-isinstance(val, complexfloating)
-\family default
- will return True if val is a complex valued type, while
-\family typewriter
-isinstance(val, flexible)
-\family default
- will return true if val is one of the flexible itemsize array types (string,
- unicode, void).
-
-\end_layout
-
-\begin_layout Warning
-The bool_ type is not a subclass of the int_ type (the bool_ type is not
- even a number type).
- This is different than Python's default implementation of bool as a sub-class
- of int.
-\end_layout
-
-\begin_layout Section
-Attributes of array scalars
-\end_layout
-
-\begin_layout Standard
-The array scalar objects have an
-\family typewriter
-__array_priority__
-\family default
- of NPY_SCALAR_PRIORITY (-1,000,000.0).
- They also do not (yet) have a ctypes attribute.
- Otherwise, they share the same attributes as arrays:
-\end_layout
-
-\begin_layout Description
-flags
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns True for CONTIGUOUS, OWNDATA, FORTRAN, and ALIGNED.
- Always returns False for WRITEABLE, and UPDATEIFCOPY.
-
-\end_layout
-
-\begin_layout Description
-shape
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns ().
-\end_layout
-
-\begin_layout Description
-strides
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns ().
-\end_layout
-
-\begin_layout Description
-ndim
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns 0.
-\end_layout
-
-\begin_layout Description
-data
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A read-only buffer object of size self.itemsize,
-\end_layout
-
-\begin_layout Description
-size
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return 1.
-\end_layout
-
-\begin_layout Description
-itemsize
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The number of bytes this scalar requires.
-\end_layout
-
-\begin_layout Description
-base
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns None.
-\end_layout
-
-\begin_layout Description
-dtype
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns data type descriptor corresponding to this array scalar.
-
-\end_layout
-
-\begin_layout Description
-real
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The real part of the scalar.
-\end_layout
-
-\begin_layout Description
-imag
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The imaginary part of the scalar (or 0 if this is real).
-\end_layout
-
-\begin_layout Description
-flat
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a 1-d iterator object (of size 1).
-\end_layout
-
-\begin_layout Description
-T
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a reference to self.
-\end_layout
-
-\begin_layout Description
-__array_interface__
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The Python-side to the array interface.
-
-\end_layout
-
-\begin_layout Description
-__array_struct__
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The C-side to the array interface
-\end_layout
-
-\begin_layout Description
-__array_priority__
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- -100.0 (very low-priority).
-
-\end_layout
-
-\begin_layout Description
-__array_wrap__ (obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns an array scalar from an array
-\end_layout
-
-\begin_layout Section
-Methods of array scalars
-\end_layout
-
-\begin_layout Standard
-Array scalars have exactly the same methods as arrays.
- The default behavior of these methods is to internally convert the scalar
- to an equivalent 0-dimensional array and to call the corresponding array
- method.
- The exceptions to these rules are given below.
- In addition, math operations on array scalars are defined so that the same
- hardware flags are set and used to interpret the results as for ufunc.
- Therefore the error state used for ufuncs also carries over to the math
- on array scalars.
-\end_layout
-
-\begin_layout Description
-__new__ (obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The default behavior is to return a new array or array scalar by calling
- array(obj) with the corresponding data type.
- There are two situations when this default behavior is delayed until another
- approach is tried.
- First, when the array scalar type inherits from a Python type, then the
- Python types new method is called first and the default method is called
- only if that approach fails.
- The second situation is for the
-\family typewriter
-void
-\family default
- data type where a single integer-like argument will cause a void scalar
- of that size to be created and initialized to 0.
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Notice that because array(obj) is called for new, if obj is a nested sequence,
- then the return object could actually be an
-\family typewriter
-ndarray
-\family default
-.
- Thus, arrays of the correct type can also be created by calling the array
- data type name directly:
-\end_layout
-
-\begin_layout MyCode
->>> uint32([[5,6,7,8],[1,2,3,4]])
-\newline
-array([[5, 6, 7, 8],
-\newline
- [1, 2, 3, 4]],
- dtype=uint32)
-\end_layout
-
-\begin_layout Description
-__array__ (<None>)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns a 0-dimensional array of the given data type, or of type(self)
- if argument is None.
-\end_layout
-
-\begin_layout Description
-__array_wrap__ (array)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns a scalar array object from the first-element of the array.
-\end_layout
-
-\begin_layout Description
-__squeeze__ ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns self.
-\end_layout
-
-\begin_layout Description
-byteswap (<False>)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Trying to set the first (inplace) argument to True raises a ValueError.
- Otherwise, this returns a new array scalar with the data byteswapped.
-
-\end_layout
-
-\begin_layout Description
-__reduce__ ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This is called to pickle an array scalar.
- It returns a tuple of (numpy.core.multiarray.scalar, self.dtypestr, obj or
- self.tostring()) which can be used to reconstruct the scalar on unpickling.
- Notice that no state is written, because the entire scalar can be constructed
- from just the string.
- Also, if this is an object array scalar, then the Python object being reference
-d is written.
-\end_layout
-
-\begin_layout Description
-__setstate__ ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Does nothing but return None.
-\end_layout
-
-\begin_layout Description
-setflags ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Does nothing, as flags cannot be set for scalars
-\begin_inset LatexCommand index
-name "array scalars|)"
-
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Section
-Defining New Types
-\end_layout
-
-\begin_layout Standard
-There are two ways to effectively define a new type of array.
- One way is to simply subclass the ndarray and overwrite the methods of
- interest.
- This will work to a degree, but internally certain behaviors are fixed
- by the data type of the array.
- To fully customize the data type of an array you need to define a new data-type
- for the array, and register it with NumPy.
- This new type can only be defined in C.
- How to define a new data type in C will be discussed in the next part of
- the book.
-\end_layout
-
-\begin_layout Chapter
-Data-type (
-\family typewriter
-dtype
-\family default
-) Objects
-\end_layout
-
-\begin_layout Quotation
-We cannot expect that all nations will adopt like systems, for conformity
- is the jailer of freedom and the enemy of growth.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-John F.
- Kennedy
-\end_layout
-
-\begin_layout Quotation
-What information consumes is rather obvious: it consumes the attention of
- its recipients.
- Hence, a wealth of information creates a poverty of attention and a need
- to allocate that attention efficiently among the overabundance of information
- sources that might consume it.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Herbert Simon
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand label
-name "cha:Data-descriptor-objects"
-
-\end_inset
-
-It
-\begin_inset LatexCommand index
-name "dtype|("
-
-\end_inset
-
- is important not to confuse the
-\begin_inset Quotes eld
-\end_inset
-
-array-scalars
-\begin_inset Quotes erd
-\end_inset
-
- with the
-\begin_inset Quotes eld
-\end_inset
-
-data-type objects.
-\begin_inset Quotes erd
-\end_inset
-
- It is true that an array-scalar can be interpreted as a data-type object
- and so can be used to refer to the data-type of an array.
- However, the data-type object is a separate Python object.
- Every ndarray has an associated data-type object that completely defines
- the data in the array (including any named fields).
- For every built-in data-type object there is an associated type object
- whose instances are the array-scalars.
- Because of the association between each data-type object and a type-object
- of the corresponding array scalar, the array-scalar type-objects can also
- be thought of as data-types.
- However, for the type objects of flexible array-scalars (string, unicode_,
- and void), the type-objects alone are not enough to specify the full data-type
- because the length is not given.
- The data-type constructor,
-\series bold
-numpy.dtype
-\series default
-, converts any object that can be considered as a data-type into a data-type
- object which is the actual object an ndarray looks to in order to interpret
- each element of its data region.
- Whenever a data-type is required in a NumPy function or method, supplying
- a dtype object is always fastest.
- If the object supplied is not a dtype object, then it will be converted
- to one using dtype(obj).
- Therefore, understanding data-type objects is the key to understanding
- how data types are really represented and understood in NumPy.
-\end_layout
-
-\begin_layout Section
-Attributes
-\begin_inset LatexCommand index
-name "dtype!attributes|("
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-type
-\begin_inset LatexCommand index
-name "dtype!attributes!type"
-
-\end_inset
-
- The
-\begin_inset LatexCommand index
-name "The"
-
-\end_inset
-
- type object used to instantiate a scalar of this data-type.
-\end_layout
-
-\begin_layout Description
-kind
-\begin_inset LatexCommand index
-name "dtype!attributes!kind"
-
-\end_inset
-
- A character code (one of 'biufcSUV') identifying the general kind of data.
-
-\end_layout
-
-\begin_layout Description
-char
-\begin_inset LatexCommand index
-name "dtype!attributes!char"
-
-\end_inset
-
- A unique character code for each of the 21 different built-in types.
-
-\end_layout
-
-\begin_layout Description
-num
-\begin_inset LatexCommand index
-name "dtype!attributes!num"
-
-\end_inset
-
- A unique number for each of the 21 different built-in types roughly ordered
- from least-to-most precision.
-
-\end_layout
-
-\begin_layout Description
-str
-\begin_inset LatexCommand index
-name "dtype!attributes!str"
-
-\end_inset
-
- The array-protocol typestring of this data-type object.
-\end_layout
-
-\begin_layout Description
-name
-\begin_inset LatexCommand index
-name "dtype!attributes!name"
-
-\end_inset
-
- A bit-width name for this data-type (un-sized flexible data-type objects
- are missing the width).
-
-\end_layout
-
-\begin_layout Description
-byteorder
-\begin_inset LatexCommand index
-name "dtype!attributes!byteorder"
-
-\end_inset
-
- A character indicating the byte-order of this data-type object ('=' : native,
- '<' : little-endian, '>' : big-endian, '|' : not applicable).
- All built-in data-type objects have byteorder either '=' or '|'.
-
-\end_layout
-
-\begin_layout Description
-itemsize
-\begin_inset LatexCommand index
-name "dtype!attributes!itemsize"
-
-\end_inset
-
- The element size of this data-type object.
- For 18 of the 21 types this number is fixed by the data-type.
- For the flexible data-types, this number can be anything.
-
-\end_layout
-
-\begin_layout Description
-alignment
-\begin_inset LatexCommand index
-name "dtype!attributes!alignment"
-
-\end_inset
-
- The required alignment (in bytes) of this data-type according to the compiler.
- More information is available in the C-API section.
-
-\end_layout
-
-\begin_layout Description
-fields
-\begin_inset LatexCommand index
-name "dtype!attributes!fields"
-
-\end_inset
-
- A dictionary showing any named fields that have been defined for this data-type
- (or None if there are no named fields).
- Fields can be assigned to any built-in data-type (
-\emph on
-e.g.
-
-\emph default
- using the tuple input to the dtype constructor).
- However, fields are most useful for (subtypes of) void data-types which
- can be any size.
- Fields are a convenient way to keep track of fixed-size sub-parts of the
- total fixed-size array-element, or record.
- A field is defined in terms of another dtype object and an offset (in bytes)
- into the current record.
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The fields dictionary is indexed by keys that are the names of the fields.
- Each entry in the dictionary is a tuple fully describing the field: (dtype,
- offset[, title]).
- If present, the optional title can actually be any object (if it is string
- or unicode then it will also be a key in the fields dictionary, otherwise
- it's meta-data).
- Notice also, that the first two elements of the tuple can be passed directly
- as arguments to the getfield and setfield attributes of an ndarray.
- If field names are not specified in a constructor, they default to 'f0',
- 'f2', ..., 'f<n-1>'.
-
-\end_layout
-
-\begin_layout Description
-names
-\begin_inset LatexCommand index
-name "dtype!attributes!char"
-
-\end_inset
-
- An ordered list of field names.
- This can be used to walk through all of the named fields in offset order.
- Notice that the defined fields do not have to
-\begin_inset Quotes eld
-\end_inset
-
-cover
-\begin_inset Quotes erd
-\end_inset
-
- the record, but the itemsize of the container data-type object must always
- be at least as large as the itemsizes of the data-type objects in the defined
- fields.
- This attribute is None if there are no fields.
-\end_layout
-
-\begin_layout Description
-subdtype
-\begin_inset LatexCommand index
-name "dtype!attributes!subdtype"
-
-\end_inset
-
- Numarray introduced the concept of a fixed-length record having fields
- that were themselves arrays of another data-type.
- This is supported at a fundamental level in NumPy using this attribute
- which maintains the simplicity of defining a field by another data-type
- object.
- It either returns None or a tuple (base dtype, shape) where shape is a
- tuple showing the size of the C-contiguous array and the base dtype object
- indicates the data-type in each element of the subarray.
- If a field whose dtype object has this attribute is retrieved, then the
- extra dimensions implied by the shape are tacked on to the end of the retrieved
- array.
-
-\end_layout
-
-\begin_layout Description
-descr
-\begin_inset LatexCommand index
-name "dtype!attributes!descr"
-
-\end_inset
-
- An array-interface-compliant full description of the data-type.
- The format is that required by the 'descr' key in the __array_interface__.
-\end_layout
-
-\begin_layout Description
-isbuiltin
-\begin_inset LatexCommand index
-name "dtype!attributes!isbuiltin"
-
-\end_inset
-
- A 1 if self is one of the built-in dtype objects; a 2 if self is a user-defined
- dtype object; a 0, otherwise.
-\end_layout
-
-\begin_layout Description
-isnative
-\begin_inset LatexCommand index
-name "dtype!attributes!isnative"
-
-\end_inset
-
- True if this data-type object has a byteorder that is native to the platform;
- otherwise False.
-\end_layout
-
-\begin_layout Description
-hasobject
-\begin_inset LatexCommand index
-name "dtype!attributes!hasobject"
-
-\end_inset
-
- True if self contains reference-counted objects in any of it's fields or
- sub data-types.
- Recall that what is actually in the ndarray memory representing the Python
- object is the memory address of that object (a pointer).
- Special handling may be required and this attribute is useful for distinguishin
-g data-types that may contain arbitrary Python objects and data-types that
- won't.
-
-\end_layout
-
-\begin_layout Description
-flags
-\begin_inset LatexCommand index
-name "dtype!attributes!flags"
-
-\end_inset
-
- Bit-flags for the data-type describing how the data-type will be interpreted.
- Bit-masks are in numpy.core.multiarray as the constants ITEM_HASOBJECT, LIST_PICK
-LE, ITEM_IS_POINTER, NEEDS_INIT, NEEDS_PYAPI, USE_GETITEM, USE_SETITEM.
- A full explanation of these flags is in the second part of this book.
- These flags are largely useful for user-defined data-types.
-
-\begin_inset LatexCommand index
-name "dtype!attributes|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Construction
-\end_layout
-
-\begin_layout Description
-dtype (obj, align=0, copy=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset LatexCommand index
-name "dtype!construction|("
-
-\end_inset
-
-Return a new data-type object from obj.
- The keyword argument, align, can only be nonzero if obj is a dictionary,
- or a comma-separated string.
- If it is non-zero in those cases it is used to add padding as needed to
- the fields to match what the compiler that compiled NumPy would do to a
- similar C-struct.
- The copy argument guarantees a new copy of the data-type object, otherwise,
- the result may just be a reference to a built-in data-type object.
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Objects that can be converted to a data-type object are described in the
- following list.
- Because every object in this list can be converted to a data-type object
- it can also be used whenever a
-\family typewriter
-dtype
-\family default
- is requested by a function or method in NumPy.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-dtype
-\begin_inset LatexCommand index
-name "dtype!construction!from float"
-
-\end_inset
-
-Returns itself.
-\end_layout
-
-\begin_layout Description
-None
-\begin_inset LatexCommand index
-name "dtype!construction!from None"
-
-\end_inset
-
-Returns the default data-type descriptor object: float.
-\end_layout
-
-\begin_layout Description
-type-object
-\begin_inset LatexCommand index
-name "dtype!construction!from type"
-
-\end_inset
-
-Many Python type objects can be converted to data-type objects.
-\end_layout
-
-\begin_deeper
-\begin_layout Enumerate
-Array-scalar types: The type-objects of the 21 built-in array scalars all
- convert to an associated data-type object.
- This is true for sub-classes as well.
- Not all data-type information can be supplied with a type-object.
- Flexible data-types with default itemsizes of 0, for example, require an
- itemsize to be useful.
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Examples: int32, float64, uint16, complex128
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-Generic types: The generic hierarchical type objects convert to corresponding
- dtype objects according to the associations: (numeric, inexact, floating)
- --> float; complexfloating --> cfloat; (integer, signedinteger) --> int_;
- unsignedinteger --> uint; character --> string; (generic, flexible) -->
- void.
-
-\end_layout
-
-\begin_layout Enumerate
-Builtin types: Several python types are equivalent to a corresponding array
- scalar when used to generate a dtype object: int --> int_; bool --> bool_;
- float --> float_; complex --> cfloat; str --> string; unicode --> unicode_;
- buffer --> void; (all others) --> object_.
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Examples: object, str, float, int
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-Any type object with the dtype attribute: The attribute will be accessed
- and used directly.
- The attribute must return something that is convertible into a dtype object.
-
-\end_layout
-
-\end_deeper
-\begin_layout Description
-string
-\begin_inset LatexCommand index
-name "dtype!construction!from string"
-
-\end_inset
-
-Several kinds of strings can be converted.
- Recognized strings can be pre-pended with '>', or '<', to specify the byteorder.
-\end_layout
-
-\begin_deeper
-\begin_layout Enumerate
-One-character strings: Each built-in data-type has a character code (the
- updated Numeric typecodes), that uniquely identifies it.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Examples: 'b', 'H', 'f', 'd', 'F', 'D', Float64, Int32, UInt16
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-Array-protocol type strings: The first character specifies the kind of data
- and the remaining characters specify how many bytes of data.
- The supported kinds are 'b' --> Boolean, 'i' --> (signed) integer, 'u'
- --> unsigned integer, 'f' --> floating-point, 'c' --> complex-floating
- point, 'S', 'a' --> string, 'U' --> unicode, 'V' --> anything (void).
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Examples: 'i4', 'f8', 'c16', 'b1', 'S10', 'a25'
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-Comma-separated field formats: numarray introduced a short-hand notation
- for specifying the format of a record as a comma-separated string of basic
- formats.
- A basic format in this context is an optional shape specifier followed
- by an array-protocol type string.
- Parenthesis are required on the shape if it is greater than 1-d.
- NumPy allows a modification on the format in that any string that can uniquely
- identify the type can be used to specify the data-type in a field.
- This data-type defines fields named 'f0', 'f2', ..., 'f<N-1>' where N (>1)
- is the number of comma-separated basic formats in the string.
- If the optional shape specifier is provided, then the data-type for the
- corresponding field contains a subdtype attribute providing the shape.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Examples:
-\begin_inset Quotes eld
-\end_inset
-
-i4, (2,3)f8, f4
-\begin_inset Quotes erd
-\end_inset
-
-;
-\begin_inset Quotes eld
-\end_inset
-
-a3, 3u8, (3,4)a10
-\begin_inset Quotes erd
-\end_inset
-
-
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-Any string in NumPy.sctypeDict.keys():
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Examples: 'uint32', 'Int16', 'Uint64', 'Float64', 'Complex64'
-\end_layout
-
-\end_deeper
-\end_deeper
-\begin_layout Description
-tuple
-\begin_inset LatexCommand index
-name "dtype!construction!from tuple"
-
-\end_inset
-
-Three kinds of tuples each of length 2 can be converted into a data-type
- object:
-\end_layout
-
-\begin_deeper
-\begin_layout Enumerate
-(flexible dtype, itemsize): The first argument must be an object that is
- converted to a flexible data-type object (one whose element size is 0),
- the second argument is an integer providing the desired itemsize.
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Examples: (void, 10); (str, 35), ('U', 10)
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-(fixed dtype, shape): The first argument is any object that can be converted
- into a fixed-size data-type object.
- The second argument is the desired shape of this type.
- If the shape parameter is 1, then the data-type object is equivalent to
- fixed dtype.
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Examples: (int32, (2,5)); ('S10', 1)=='S10'; ('i4, (2,3)f8, f4', (2,3))
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-(base dtype, new dtype): Both arguments must be convertible to data-type
- objects in this case.
- The base dtype is the data-type object that the new data-type builds on.
- This is how you could assign named fields to any built-in data-type object.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Examples: (int32, {'real':(int16,0), 'imag':(int16,2)}); (int32, (int8,
- 4));
-\newline
-('i4', [('r','u1'),('g','u1'),('b','u1'),('a','u1')])
-\end_layout
-
-\end_deeper
-\end_deeper
-\begin_layout Description
-list
-\begin_inset LatexCommand index
-name "dtype!construction!from list"
-
-\end_inset
-
-(array description interface): This style is more fully described at
-\begin_inset LatexCommand url
-name "this site"
-target "http://numpy.scipy.org/array_interface.html"
-
-\end_inset
-
-.
- It consists of a list of fields where each field is described by a tuple
- of length 2 or 3.
- The first element of the tuple is the field name (if this is '' then a
- standard field name, 'f#', is assigned).
- The field name may also be a 2-tuple of strings where the first string
- is either a
-\begin_inset Quotes eld
-\end_inset
-
-title
-\begin_inset Quotes erd
-\end_inset
-
- (which may be any string or unicode string) or meta-data for the field
- which can be any object, and the second string is the
-\begin_inset Quotes eld
-\end_inset
-
-name
-\begin_inset Quotes erd
-\end_inset
-
- which must be a valid Python identifier.
- The second element of the tuple can be anything that can be interpreted
- as a data-type.
- The optional third element of the tuple contains the shape if this field
- represents an array of the data-type in the second element.
- This style does not accept align=1 as it is assumed that all of the memory
- is accounted for by the array interface description.
- See the web-page for more examples.
- Note that a 3-tuple with a third argument equal to 1 is equivalent to a
- 2-tuple.
-\end_layout
-
-\begin_layout Description
-Examples: [('big','>i4'), ('little','<i4')]; [('R','u1'), ('G','u1'), ('B','u1')
-, ('A','u1')]
-\end_layout
-
-\begin_layout Description
-dictionary
-\begin_inset LatexCommand index
-name "dtype!construction!from dict"
-
-\end_inset
-
-There are two dictionary styles.
- The first is a standard dictionary format while the second accepted format
- allows the fields attribute of dtype objects to be interpreted as a data-type.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Enumerate
-names and formats: This style has two required and two optional keys.
- The 'names' and 'formats' keys are required.
- Their respective values are equal-length lists with the field names and
- the field formats.
- The field names must be strings and the field formats can be any object
- accepted by dtypedescr constructor.
- The optional keys in the dictionary are 'offsets' and 'titles' and their
- values must each be lists of the same length as the 'names' and 'formats'
- lists.
- The 'offsets' value is a list of integer offsets for each field, while
- the 'titles' value is a list of titles for each field (None can be used
- if no title is desired for that field).
- The titles can be any string or unicode object and will add another entry
- to the fields dictionary keyed by the title and referencing the same field
- tuple which will contain the title as an additional tuple member.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Examples: {'names': ['r','g','b','a'], 'formats': [uint8, uint8, uint8,
- uint8]}; {'names':['r','b'], 'formats': ['u1', 'u1'], 'offsets': [0, 2],
- 'titles': ['Red pixel', 'Blue pixel']}
-\end_layout
-
-\end_deeper
-\begin_layout Enumerate
-data-type object fields: This style is patterned after the format of the
- fields dictionary in a data-type object.
- It contains string or unicode keys that refer to (data-type, offset) or
- (data-type, offset, title) tuples.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Examples: {'col1': ('S10', 0), 'col2': (float32, 10), 'col3': (int, 14)}
-\begin_inset LatexCommand index
-name "dtype!construction|)"
-
-\end_inset
-
-
-\end_layout
-
-\end_deeper
-\end_deeper
-\end_deeper
-\begin_layout Section
-Methods
-\begin_inset LatexCommand index
-name "dtype!methods|("
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-newbyteorder
-\begin_inset LatexCommand index
-name "dtype!methods!newbyteorder"
-
-\end_inset
-
-(<'swap'>)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct a new copy of self with its byteorder changed according to the
- optional argument.
- All changes are also propagated to the data-type objects of all fields
- and sub-arrays.
- If a byteorder of '|' (meaning ignore) is encountered it is left unchanged.
- The default behavior is to swap the byteorder.
- Other possible arguments are 'big' ('>'), 'little' ('<'), and 'native'
- ('=') which recursively forces the byteorder of self (and it's field data-type
- objects and any sub-arrays) to the corresponding byteorder.
-
-\end_layout
-
-\begin_layout Description
-__reduce__
-\begin_inset LatexCommand index
-name "dtype!methods!\\_\\_reduce\\_\\_"
-
-\end_inset
-
- ()
-\end_layout
-
-\begin_layout Description
-__setstate__
-\begin_inset LatexCommand index
-name "dtype!methods!\\_\\_setstate\\_\\_"
-
-\end_inset
-
- (state)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Data-type objects can be pickled because of these two methods.
- The __reduce__() method returns a 3-tuple consisting of (callable object,
- args, state), where the callable object is numpy.core.multiarray.dtype and
- args is (typestring, 0, 1) unless the data-type inherits from void (or
- is user-defined) in which case args is (typeobj, 0, 1).
- The state is an 8-tuple with (version, endian, self.subdtype, self.names,
- self.fields, self.itemsize, self.alignment, self.flags).
- The self.itemsize and self.alignment entries are both -1 if the data-type
- object is built-in and not flexible (because they are fixed on creation).
- The setstate method takes the saved state and updates the date-type
-\begin_inset LatexCommand index
-name "dtype!methods|)"
-
-\end_inset
-
-object.
-\begin_inset LatexCommand index
-name "dtype|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Chapter
-Standard Classes
-\end_layout
-
-\begin_layout Quotation
-To generalize is to be an idiot.
-
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-William Blake
-\end_layout
-
-\begin_layout Quotation
-Not everything that can be counted counts, and not everything that counts
- can be counted.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Albert Einstein
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "ndarray!subtyping|("
-
-\end_inset
-
-The ndarray in NumPy is a
-\begin_inset Quotes eld
-\end_inset
-
-new-style
-\begin_inset Quotes erd
-\end_inset
-
- Python built-in-type.
- Therefore, it can be inherited from (in Python or in C) if desired.
- Therefore, it can form a foundation for many useful classes.
- Often whether to sub-class the array object or to simply use the core array
- component as an internal part of a new class is a difficult decision, and
- can be simply a matter of choice.
- NumPy has several tools for simplifying how your new object interacts with
- other array objects, and so the choice may not be significant in the end.
- One way to simplify the question is by asking yourself if the object you
- are interested can be replaced as a single array or does it really require
- two or more arrays at it's core.
- For example, in the standard NumPy distribution, the matrix and records
- classes inherit from the ndarray, while masked arrays use two ndarrays
- as objects of its internal structure.
-\end_layout
-
-\begin_layout Standard
-Note that asarray(a) always returns the base-class ndarray.
- If you are confident that your use of the array object can handle any subclass
- of an ndarray, then asanyarray(a) can be used to allow subclasses to propagate
- more cleanly through your subroutine.
- In principal a subclass could redefine any aspect of the array and therefore,
- under strict guidelines, asanyarray(a) would rarely be useful.
- However, most subclasses of the arrayobject will not redefine certain aspects
- of the array object such as the buffer interface, or the attributes of
- the array.
- One of important example, however, of why your subroutine may not be able
- to handle an arbitrary subclass of an array is that matrices redefine the
- '*' operator to be matrix-multiplication, rather than element-by-element
- multiplication.
-\end_layout
-
-\begin_layout Section
-Special attributes and methods recognized by NumPy
-\begin_inset LatexCommand index
-name "ndarray!attributes!recognized by|("
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-__array_finalize__ (obj)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This method is called whenever the system internally allocates a new array
- from obj, where obj is a subclass (subtype) of the (big)ndarray.
- It can be used to change attributes of self after construction (so as to
- ensure a 2-d matrix for example), or to update meta-information from the
-
-\begin_inset Quotes eld
-\end_inset
-
-parent.
-\begin_inset Quotes erd
-\end_inset
-
- Subclasses inherit a default implementation of this method that does nothing.
-\end_layout
-
-\begin_layout Description
-__array_wrap__ (array)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This method should return an instance of the class from the ndarray object
- passed in.
- For example, this is called after every ufunc for the object with the highest
- __array_priority__.
- The ufunc-computed array object is passed in and whatever is returned is
- passed to the user.
- Subclasses inherit a default implementation of this method.
-\end_layout
-
-\begin_layout Description
-__array__ (dtype <None>)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This method is called to obtain an ndarray object when needed.
- You should always guarantee this returns an actual ndarray object.
- Subclasses inherit a default implementation of this method.
-
-\end_layout
-
-\begin_layout Description
-__array_priority__
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The value of this attribute is used to determine what type of object to
- return in situations where there is more than one possibility for the Python
- type of the returned object.
- Subclasses inherit a default value of 1.0 for this attribute.
-\begin_inset LatexCommand index
-name "ndarray!attributes!recognized by|)"
-
-\end_inset
-
-
-\begin_inset LatexCommand index
-name "ndarray!subtyping|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Matrix Objects
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "matrix|("
-
-\end_inset
-
-Matrix objects inherit from the ndarray and therefore, they have the same
- attributes and methods of ndarrays.
- There are six important differences of matrix objects, however that may
- lead to unexpected results when you use matrices but expect them to act
- like arrays:
-\end_layout
-
-\begin_layout Enumerate
-Matrix objects can be created using a string notation to allow Matlab-style
- syntax where spaces separate columns and semicolons (';') separate rows.
-
-\end_layout
-
-\begin_layout Enumerate
-Matrix objects are always two-dimensional.
- This has far-reaching implications, in that m.ravel() is still two-dimensional
- (with a 1 in the first dimension) and item selection returns two-dimensional
- objects so that sequence behavior is fundamentally different than arrays.
-\end_layout
-
-\begin_layout Enumerate
-Matrix objects over-ride multiplication to be matrix-multiplication.
-
-\series bold
-Make sure you understand this for functions that you may want to receive
- matrices.
- Especially in light of the fact that asanyarray(m) returns a matrix when
- m is a matrix.
-\end_layout
-
-\begin_layout Enumerate
-Matrix objects over-ride power to be matrix raised to a power.
- The same warning about using power inside a function that uses asanyarray(...)
- to get an array object holds for this fact.
-
-\end_layout
-
-\begin_layout Enumerate
-The default __array_priority__ of matrix objects is 10.0, and therefore mixed
- operations with ndarrays always produce matrices.
-
-\end_layout
-
-\begin_layout Enumerate
-Matrices have special attributes which make calculations easier.
- These are
-\end_layout
-
-\begin_deeper
-\begin_layout Enumerate
-.T --- return the transpose of self
-\end_layout
-
-\begin_layout Enumerate
-.H --- return the conjugate transpose of self
-\end_layout
-
-\begin_layout Enumerate
-.I --- return the inverse of self
-\end_layout
-
-\begin_layout Enumerate
-.A --- return a view of the data of self as a 2d array (no copy is done).
-\end_layout
-
-\end_deeper
-\begin_layout Warning
-Matrix objects over-ride multiplication, '*', and power, '**', to be matrix-mult
-iplication and matrix power, respectively.
- If your subroutine can accept sub-classes and you do not convert to base-class
- arrays, then you must use the ufuncs multiply and power to be sure that
- you are performing the correct operation for all inputs.
-
-\end_layout
-
-\begin_layout Standard
-The matrix class is a Python subclass of the ndarray and can be used as
- a reference for how to construct your own subclass of the ndarray.
- Matrices can be created from other matrices, strings, and anything else
- that can be converted to an
-\family typewriter
-ndarray
-\family default
-.
- The name
-\begin_inset Quotes eld
-\end_inset
-
-mat
-\begin_inset Quotes erd
-\end_inset
-
- is an alias for
-\begin_inset Quotes eld
-\end_inset
-
-matrix
-\begin_inset Quotes erd
-\end_inset
-
- in NumPy.
-\end_layout
-
-\begin_layout Description
-Example\InsetSpace ~
-1: Matrix creation from a string
-\end_layout
-
-\begin_layout MyCode
->>> a=mat('1 2 3; 4 5 3')
-\newline
->>> print (a*a.T).I
-\newline
-[[ 0.2924 -0.1345]
-\newline
- [-0.1345 0.0819]]
-\end_layout
-
-\begin_layout Description
-Example\InsetSpace ~
-2: Matrix creation from nested sequence
-\end_layout
-
-\begin_layout MyCode
->>> mat([[1,5,10],[1.0,3,4j]])
-\newline
-matrix([[ 1.+0.j, 5.+0.j, 10.+0.j],
-\newline
- [
- 1.+0.j, 3.+0.j, 0.+4.j]])
-\end_layout
-
-\begin_layout Description
-Example\InsetSpace ~
-3: Matrix creation from an array
-\end_layout
-
-\begin_layout MyCode
->>> mat(random.rand(3,3)).T
-\newline
-matrix([[ 0.7699, 0.7922, 0.3294],
-\newline
- [ 0.2792,
- 0.0101, 0.9219],
-\newline
- [ 0.3398, 0.7571, 0.8197]])
-\end_layout
-
-\begin_layout Description
-matrix (data, dtype=None, copy=True)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The sequence to convert to a matrix is passed in as data.
- If dtype is None, then the data-type is determined from the data.
- If copy is True, then a copy of the data is made, otherwise, the same data
- buffer is used.
- If no buffer can be found for data, then a copy is also made.
- Note: The matrix object is actually a class and so using this syntax calls
- matrix.__new__(matrix, data, dtype, copy) which is what happens whenever
- you
-\begin_inset Quotes eld
-\end_inset
-
-call
-\begin_inset Quotes erd
-\end_inset
-
- any class object as a function.
-\end_layout
-
-\begin_layout Description
-mat
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Just another name for matrix.
-\end_layout
-
-\begin_layout Description
-asmatrix (data, dtype=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns the data without copying.
- Equivalent to matrix(data, dtype, copy=False).
-\end_layout
-
-\begin_layout Description
-bmat (obj, ldict=None, gdict=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Build a matrix object from a string, nested sequence or an array.
- This command lets you build up matrices from other other objects.
- The ldict and gdict parameters are local and module (global) dictionaries
- that are only used when obj is a string.
- If they are not provided, then the local and module dictionaries present
- when bmat is called are used.
-\begin_inset LatexCommand index
-name "matrix|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout MyCode
->>> A = mat('2 2; 2 2'); B=mat('1 1; 1 1');
-\newline
->>> print bmat('A B; B A')
-\newline
-[[2
- 2 1 1]
-\newline
- [2 2 1 1]
-\newline
- [1 1 2 2]
-\newline
- [1 1 2 2]]
-\end_layout
-
-\begin_layout Section
-Memory-mapped-file arrays
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "memory maps|("
-
-\end_inset
-
-Memory-mapped files are useful for reading and/or modifying small segments
- of a large file with regular layout, without reading the entire file into
- memory.
- A simple subclass of the ndarray uses a memory-mapped file for the data
- buffer of the array.
- For small files, the over-head of reading the entire file into memory is
- typically not significant, however for large files using memory mapping
- can save considerable resources.
-
-\end_layout
-
-\begin_layout Note
-Memory-mapped arrays use the the Python memory-map object which (prior to
- Python 2.5) does not allow files to be larger than a certain size depending
- on the platform.
- This size is always < 2GB even on 64-bit systems.
-
-\end_layout
-
-\begin_layout Standard
-The class is called memmap and is available in the NumPy namespace.
- The __new__ method of the class has been re-written to have the following
- syntax:
-\end_layout
-
-\begin_layout Description
-__new__ (cls, filename, dtype=uint8, mode='r+', offset=0, shape=None, order=0)
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-filename The file name to be used as the array data buffer
-\end_layout
-
-\begin_layout Description
-dtype A data-type object used to interpret the file contents (including
- byteorder).
-\end_layout
-
-\begin_layout Description
-mode The mode to open the file in.
- Valid modes are 'readonly' or 'r', 'copyonwrite' or 'c', 'readwrite' or
- 'r+', and 'write' or 'w+'.
- This mode determines the WRITEABLE flag of the returned array.
-\end_layout
-
-\begin_layout Description
-offset An offset into the file to start the array data.
-\end_layout
-
-\begin_layout Description
-shape The desired shape of the array.
- If this is None, then the returned array will be 1-d with the number of
- elements determined by the file size and data type.
-\end_layout
-
-\begin_layout Description
-order Either 'C' or 'Fortran' to indicate the order that an N-D array should
- be interpreted.
- This only has an effect if the shape is greater than 2-D.
-\end_layout
-
-\end_deeper
-\begin_layout Standard
-Memory-mapped-file arrays have one additional method (besides those they
- inherit from the ndarray): self.
-\series bold
-sync
-\series default
-() which must be called manually by the user to ensure that any changes
- to the array actually get written to disk.
-
-\end_layout
-
-\begin_layout Description
-Example:
-\end_layout
-
-\begin_layout MyCode
->>> a = memmap('newfile.dat', dtype=float, mode='w+', shape=1000)
-\newline
->>> a[10]
- = 10.0
-\newline
->>> a[30] = 30.0
-\newline
->>> del a
-\newline
->>> b = fromfile('newfile.dat', dtype=float)
-\newline
->>>
- print b[10], b[30]
-\newline
-10.0 30.0
-\newline
->>> a = memmap('newfile.dat', dtype=float)
-\newline
->>> print
- a[10], a[30]
-\newline
-10.0 30.0
-\end_layout
-
-\begin_layout Section
-Character arrays (numpy.char)
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "character arrays|("
-
-\end_inset
-
-These are enhanced arrays of either string type or unicode_ type.
- These arrays inherit from the ndarray, but specially-define the operations
- +, *, and % on a (broadcasting) element-by-element basis.
- These operations are not available on the standard ndarray of character
- type.
- In addition, the chararray has all of the standard string (and unicode)
- methods, executing them on an element-by-element basis.
- Perhaps the easiest way to create a chararray is to use self.view(chararray)
- where self is an ndarray of string or unicode data-type.
- However, a chararray can also be created using the numpy.chararray.__new__
- method.
-\end_layout
-
-\begin_layout Description
-__new__ (shape, itemsize, unicode=False, buffer=None, offset=0, strides=None,
- order=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Create a new character array of string or unicode type and itemsize characters.
- Create the array using buffer (with offset and strides) if it is not None.
- If buffer is None, then construct a new array with strides in Fortran order
- if len(shape) >=2 and order is 'Fortran' (otherwise the strides will be
- in 'C' order).
-
-\end_layout
-
-\begin_layout Description
-char.array (obj, itemsize=None, copy=True, unicode=False, order=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Create a chararray from the nested sequence obj.
- If obj is an ndarray of data-type unicode_ or string, then its data is
- wrapped by the chararray object and converted to the desired type (string
- or unicode).
-
-\end_layout
-
-\begin_layout Standard
-Another difference with the standard ndarray of string data-type is that
- the chararray inherits the feature introduced by Numarray that white-space
- at the end of any element in the array will be ignored on item retrieval
- and comparison operations.
-
-\begin_inset LatexCommand index
-name "character arrays|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Record Arrays (numpy.rec)
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "record arrays|("
-
-\end_inset
-
-NumPy provides a powerful data-type object that allows any ndarray to hold
- (arbitrarily nested) record-like items with named-field access to the sub-types.
- This is possible without any special record-array sub-class.
- Consider the example where each item in the array is a simple record of
- name, age, and weight.
- You could specify a data-type for an array of such records using the following
- data-type object:
-\end_layout
-
-\begin_layout MyCode
->>> desc = dtype({'names': ['name', 'age', 'weight'], 'formats': ['S30',
- 'i2', 'f4']})
-\newline
->>> a = array([('Bill',31,260.0),('Fred', 15, 145.0)],dtype=desc)
-\newline
->>>
- print a[0]
-\newline
-('Bill', 31, 260.0)
-\newline
->>> print a['name']
-\newline
-['Bill' 'Fred']
-\newline
->>> print
- a['age']
-\newline
-[31 15]
-\newline
->>> print a['weight']
-\newline
-[ 260.
- 145.]
-\newline
->>> print a[0]['name'], a[0]['age'], a[0]['weight']
-\newline
-Bill 31 260.0
-\newline
->>>
- print len(a[0])
-\newline
-3
-\end_layout
-
-\begin_layout Standard
-This example shows how a general array can be assigned named fields and
- how these fields can be accessed.
- In this case the a[0] object is an array-scalar of type void.
- The void array-scalars are unique in that they contain references to (rather
- than copies of) the underlying data whenever fields are defined.
- Therefore, the record data can be modified in place:
-\end_layout
-
-\begin_layout MyCode
->>> a[0]['name'] = 'George'; print a
-\newline
-[('George', 31, 260.0) ('Fred', 15, 145.0)]
-\end_layout
-
-\begin_layout Standard
-The recarray subclass and its accompanying record item add the ability to
- access named fields through attribute lookup.
- A quick way to get a record array is to use the view method of the ndarray.
-
-\end_layout
-
-\begin_layout MyCode
->>> r = a.view(recarray)
-\newline
->>> print r.name
-\newline
-['George' 'Fred']
-\end_layout
-
-\begin_layout Standard
-The numpy.core.records module (aliased to nump.rec when numpy is imported)
- contains additional convenience functions for constructing record arrays.
- All of the following constructors have two different mechanisms for specifying
- the data-type.
- Either the dtype= argument can be specified or the argument formats= can
- be specified along with an optional set of four additional keyword arguments
- (names=, titles=, aligned= and byteorder=).
- In some cases neither dtype= nor formats= is required as the data-type
- can be inferred from the object passed in as the first argument.
-\end_layout
-
-\begin_layout Standard
-The five argument method for specifying a data-type constructs a data-type
- object internally.
- The comma-separated formats string is used to specify the fields.
- The names (and optional titles) of the fields can be specified by a comma-separ
-ated string of names (or titles).
- The aligned flag determines whether the fields are packed (False) or padded
- (True) according to the platform compiler rules.
- The byteorder argument allows specification of the byte-order for all of
- the fields at once (they can also be specified individually in the formats
- string).
- The default byte-order is native to the platform.
-
-\end_layout
-
-\begin_layout Description
-array (obj, dtype=None, shape=None, offset=0, strides=None, formats=None,
- names=None, titles=None, aligned=False, byteorder=None, copy=True)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A general-purpose record array constructor that is a front-end to the other
- constructors If obj is None, then call the
-\series bold
-recarray
-\series default
- constructor.
- If obj is a string, then call the
-\series bold
-fromstring
-\series default
- constructor.
- If obj is a list or a tuple then if the first object is an ndarray, then
- call
-\series bold
-fromarrays
-\series default
-, otherwise call
-\series bold
-fromrecords
-\series default
-.
- If obj is a recarray, then make a copy of the data in recarray (if copy
- is True) and use the new formats, names, and titles.
- If obj is a file then call
-\series bold
-fromfile
-\series default
-.
- Finally, if obj is an ndarray, then return obj.view(recarray) and make a
- copy of the data if copy is True.
- Otherwise, call the __array_interface__ attribute and try to convert using
- the information returned from that object.
- Either dtype or the formats argument must be given if obj is None, a string,
- or a file, and if obj is None so the recarray constructor will be called,
- then shape must be given as well.
-
-\end_layout
-
-\begin_layout Description
-fromarrays (array_list, dtype=None, shape=None, formats=None, names=None,
- titles=None, aligned=False, byteorder=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Create a record array from a (flat) list of ndarrays.
- The data from the arrays will be copied into the fields.
- If formats is None and dtype is None, then the formats will be determined
- from the arrays.
- The names and titles arguments can be a list, tuple or a (comma-separated)
- string specifying the names and/or titles to use for the fields.
- If aligned is True, then the structure will be padded according to the
- rules of the compiler that NumPy was compiled with.
-\end_layout
-
-\begin_layout MyCode
->>> x1 = array([21,32,14])
-\newline
->>> x2 = array(['my','first','name'])
-\newline
->>> x3 =
- array([3.1, 4.5, 6.2])
-\newline
->>> r = rec.fromarrays([x1,x2,x3], names='id, word, number')
-\newline
->
->> print r[1]
-\newline
-(32, 'first', 4.5)
-\newline
->>> r.number
-\newline
-array([ 3.1, 4.5, 6.2])
-\newline
->>> r.word
-\newline
-chararra
-y(['my', 'first', 'name'],
-\newline
- dtype='|S5')
-\end_layout
-
-\begin_layout Description
-fromrecords (rec_list, dtype=None, shape=None, formats=None, names=None,
- titles=None, aligned=False, byteorder=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct a record array from a (nested) sequence of tuples that define
- the records.
- If formats are not given, they are deduced from the records, but this is
- slower.
- The field names and field titles can be specified.
- If aligned is non-zero, then the record array is padded so that fields
- are aligned as the platform compiler would do if the fields represented
- a C-struct.
-\end_layout
-
-\begin_layout MyCode
->>> recs = [('Bill', 31, 260.0), ('Fred', 15, 145.0)]
-\newline
->>> r = rec.fromrecords(recs,
- formats='S30,i2,f4', names='name, age, weight')
-\newline
->>> print r.name
-\newline
-['Bill' 'Fred']
-\newline
->>
-> print r.age
-\newline
-[31 15]
-\newline
->>> print r.weight
-\newline
-[ 260.
- 145.]
-\end_layout
-
-\begin_layout Description
-fromstring (datastring, dtype=None, shape=None, offset=0, formats=None,
- names=None, titles=None, aligned=0, byteorder=None):
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct a record array using the provided datastring (at the given offset)
- as the memory.
- The record array will be read-only.
- The byteorder argument may be used to specify the byteorder of all of the
- fields at the same time.
- A True aligned argument causes padding fields to be added as needed so
- that the fields are aligned on boundaries determined by the compiler.
- The shape of the returned array can also be specified.
-
-\end_layout
-
-\begin_layout Description
-fromfile (fd, dtype=None, shape=None, offset=0, formats=None, names=None,
- titles=None, aligned=False, byteorder=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct a record array from the (binary) data in the given file object,
- fd.
- This object may be an open file or a string to indicate a file to read
- from.
- If offset is non-zero, then data is read from the file at offset bytes
- from the current position.
-
-\end_layout
-
-\begin_layout Standard
-The following classes are also available in the numpy.core (and therefore
- the numpy) namespace
-\end_layout
-
-\begin_layout Description
-record A subclass of the void array scalar type that allows field access
- using attributes.
-
-\end_layout
-
-\begin_layout Description
-recarray A subclass of the ndarray that allows field access using attributes
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-__new__ (subtype, shape, formats, names=None, titles=None, buf=None, offset=0,
- strides=None, byteorder=None, aligned=0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct an array of the given subtype and shape with data-type (record,
- dtype) where dtype is constructed from formats, names, and titles.
- If buf is None, then create new memory.
- Otherwise, use the memory of buf exposed through the buffer protocol.
-\end_layout
-
-\end_deeper
-\begin_layout Description
-format_parser A class useful for creating a data-type descriptor from formats,
- names, titles, and aligned arguments.
- This is used by several of the record array constructors for consistency
- in behavior.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-__init__ (self, formats, names, titles, aligned=False, byteorder=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Construct a data-type object from formats, names, titles, aligned, and
- byteorder arguments.
- Upon completion the constructed data-type object is in self._descr.
-
-\begin_inset LatexCommand index
-name "record arrays|)"
-
-\end_inset
-
-
-\end_layout
-
-\end_deeper
-\begin_layout Section
-Masked Arrays (numpy.ma)
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "masked arrays|("
-
-\end_inset
-
-These are adapted from the masked arrays provided with Numeric.
- Masked Arrays do not inherit from the ndarray, they simply use two ndarray
- objects in their internal representation.
- Fortunately, as I have not used masked arrays in my work, Paul Dubois (the
- original author of MA for Numeric) adapted and modified the code for use
- by NumPy.
- Alexander Belopolsky (Sasha) added additional functions and improvements
-
-\end_layout
-
-\begin_layout Standard
-Masked arrays are created using the masked array creation function.
-
-\end_layout
-
-\begin_layout Description
-ma.array (data, dtype=None, copy=True, order='C', mask=ma.nomask, fill_value=None)
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-data Something that can be converted to an array.
- If data is already a masked array, then if mask is ma.nomask, the mask used
- be data.mask and the data used data.data.
-
-\end_layout
-
-\begin_layout Description
-dtype The data-type of the underlying array
-\end_layout
-
-\begin_layout Description
-copy If copy is False, then every effort will be made to not copy the data.
-
-\end_layout
-
-\begin_layout Description
-order Specify whether the array is in 'C', 'Fortran', or 'Any' order
-\end_layout
-
-\begin_layout Description
-mask Masked values are excluded from calculations.
- If this is ma.nomask, then there are no masked values.
- Otherwise, this should be an object that is convertible to an array of
- Booleans with the same shape as data.
-\end_layout
-
-\begin_layout Description
-fill_value This value is used to fill in masked values when necessary.
- The fill_value is not used for computation for functions within the ma
- module.
-\end_layout
-
-\end_deeper
-\begin_layout Standard
-Masked arrays have the same methods and attributes as arrays with the addition
- of the mask attribute as well as the
-\begin_inset Quotes eld
-\end_inset
-
-hidden
-\begin_inset Quotes erd
-\end_inset
-
- attributes ._data and ._mask.
-
-\begin_inset LatexCommand index
-name "masked arrays|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Standard container class
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "user\\_array"
-
-\end_inset
-
-
-\begin_inset LatexCommand index
-name "container class"
-
-\end_inset
-
-For backward compatibility and as a standard
-\begin_inset Quotes eld
-\end_inset
-
-container
-\begin_inset Quotes erd
-\end_inset
-
- class, the UserArray from Numeric has been brought over to NumPy and named
-
-\series bold
-numpy.lib.user_array.container
-\series default
- The container class is a Python class whose self.array attribute is an ndarray.
- Multiple inheritance is probably easier with numpy.lib.user_array.container
- than with the ndarray itself and so it is included by default.
- It is not documented here beyond mentioning its existence because you are
- encouraged to use the ndarray class directly if you can.
-
-\end_layout
-
-\begin_layout Section
-Array Iterators
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "array iterator"
-
-\end_inset
-
-Iterators are a powerful concept for array processing.
- Essentially, iterators implement a generalized for-loop.
- If myiter is an iterator object, then the Python code
-\end_layout
-
-\begin_layout LyX-Code
-for val in myiter:
-\end_layout
-
-\begin_layout LyX-Code
- ...
-\end_layout
-
-\begin_layout LyX-Code
- some code involving val
-\end_layout
-
-\begin_layout LyX-Code
- ...
-\end_layout
-
-\begin_layout Standard
-calls val=myiter.next() repeatedly until StopIteration is raised by the iterator.
- There are several ways to iterate over an array that may be useful: default
- iteration, flat iteration, and
-\begin_inset Formula $N$
-\end_inset
-
--dimensional enumeration.
-\end_layout
-
-\begin_layout Subsection
-Default iteration
-\end_layout
-
-\begin_layout Standard
-The default iterator of an ndarray object is the default Python iterator
- of a sequence type.
- Thus, when the array object itself is used as an iterator.
- The default behavior is equivalent to:
-\end_layout
-
-\begin_layout LyX-Code
-for i in arr.shape[0]:
-\end_layout
-
-\begin_layout LyX-Code
- val = arr[i]
-\end_layout
-
-\begin_layout Standard
-This default iterator selects a sub-array of dimension
-\begin_inset Formula $N-1$
-\end_inset
-
- from the array.
- This can be a useful construct for defining recursive algorithms.
- To loop over the entire array requires
-\begin_inset Formula $N$
-\end_inset
-
- for-loops.
-
-\end_layout
-
-\begin_layout MyCode
->>> a = arange(24).reshape(3,2,4)+10
-\newline
->>> for val in a:
-\newline
-...
- print 'item:', val
-\newline
-item: [[10 11 12 13]
-\newline
- [14 15 16 17]]
-\newline
-item: [[18 19
- 20 21]
-\newline
- [22 23 24 25]]
-\newline
-item: [[26 27 28 29]
-\newline
- [30 31 32 33]]
-\end_layout
-
-\begin_layout Subsection
-Flat iteration
-\end_layout
-
-\begin_layout Standard
-As mentioned previously, the flat attribute of ndarray objects returns an
- iterator that will cycle over the entire array in C-style contiguous order.
-
-\end_layout
-
-\begin_layout MyCode
->>> for i, val in enumerate(a.flat):
-\newline
-...
- if i%5 == 0: print i, val
-\newline
-0 10
-\newline
-5 15
-\newline
-10 20
-\newline
-15 25
-\newline
-20 30
-\end_layout
-
-\begin_layout Standard
-Here, I've used the built-in enumerate iterator to return the iterator index
- as well as the value.
-\end_layout
-
-\begin_layout Subsection
-N-dimensional enumeration
-\end_layout
-
-\begin_layout Standard
-Sometimes it may be useful to get the N-dimensional index while iterating.
- The ndenumerate iterator can achieve this.
-\end_layout
-
-\begin_layout MyCode
->>> for i, val in ndenumerate(a):
-\newline
-...
- if sum(i)%5 == 0: print i, val
-\newline
-(0, 0, 0) 10
-\newline
-(1, 1, 3) 25
-\newline
-(2, 0, 3) 29
-\newline
-(2,
- 1, 2) 32
-\end_layout
-
-\begin_layout Subsection
-Iterator for broadcasting
-\end_layout
-
-\begin_layout Standard
-The general concept of broadcasting is also available from Python using
- the
-\series bold
-broadcast
-\series default
- iterator.
- This object takes
-\begin_inset Formula $N$
-\end_inset
-
- objects as inputs and returns an iterator that returns tuples providing
- each of the input sequence elements in the broadcasted result.
-\end_layout
-
-\begin_layout MyCode
->>> for val in broadcast([[1,0],[2,3]],[0,1]):
-\newline
-...
- print val
-\newline
-(1, 0)
-\newline
-(0, 1)
-\newline
-(2, 0)
-\newline
-(3, 1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The methods and attributes of the broadcast object are:
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-nd the number of dimensions in the broadcasted result.
-\end_layout
-
-\begin_layout Description
-shape the shape of the broadcasted result.
-\end_layout
-
-\begin_layout Description
-size the total size of the broadcasted result.
-\end_layout
-
-\begin_layout Description
-index the current (flat) index into the broadcasted array
-\end_layout
-
-\begin_layout Description
-iters a tuple of (broadcasted) NumPy.flatiter objects, one for each array.
-\end_layout
-
-\begin_layout Description
-reset ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Reset the multiter object to the beginning.
-\end_layout
-
-\begin_layout Description
-next ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Get the next tuple of objects from the (broadcasted) arrays
-\end_layout
-
-\end_deeper
-\begin_layout Chapter
-Universal Functions
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand label
-name "par:The-Ufunc-Object"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Quotation
-Computers make it easier to do a lot of things, but most of the things they
- make it easier to do don't need to be done.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Andy Rooney
-\end_layout
-
-\begin_layout Quotation
-People think computers will keep them from making mistakes.
- They're wrong.
- With computers you make mistakes faster.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Adam Osborne
-\end_layout
-
-\begin_layout Section
-Description
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "ufunc|("
-
-\end_inset
-
-Universal functions are wrappers that provide a common interface to mathematical
- functions that operate on scalars, and can be made to operate on arrays
- in an element-by-element fashion.
- All
-\family typewriter
-u
-\family default
-niversal
-\family typewriter
-func
-\family default
-tion
-\family typewriter
-s
-\family default
- (
-\family typewriter
-ufuncs
-\family default
-) wrap some core function that takes
-\begin_inset Formula $n_{i}$
-\end_inset
-
- (scalar) inputs and produces
-\begin_inset Formula $n_{o}$
-\end_inset
-
- (scalar) outputs.
- Typically, this core function is implemented in compiled code but a Python
- function can also be wrapped into a universal function using the basic
- method
-\family typewriter
-frompyfunc
-\family default
- in the umath module.
-
-\end_layout
-
-\begin_layout Description
-frompyfunc (func, nin, nout)
-\begin_inset LatexCommand index
-name "frompyfunc"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This function returns a new universal function wrapping a Python function
- func with nin inputs and nout outputs.
- The resulting universal function works using Object arrays for both input
- and output.
- The vectorize class makes use of frompyfunc internally.
- You can view the source code using numpy.source(numpy.vectorize).
-\end_layout
-
-\begin_layout Subsection
-Broadcasting
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "broadcasting"
-
-\end_inset
-
-Each universal function takes array inputs and produces array outputs by
- performing the core function element-wise on the inputs.
- The standard broadcasting rules are applied so that inputs without exactly
- the same shapes can still be usefully operated on.
- Broadcasting can be understood by four rules:
-\end_layout
-
-\begin_layout Enumerate
-All input arrays with ndim smaller than the input array of largest ndim
- have 1's pre-pended to their shapes.
-\end_layout
-
-\begin_layout Enumerate
-The size in each dimension of the output shape is the maximum of all the
- input shapes in that dimension.
-\end_layout
-
-\begin_layout Enumerate
-An input can be used in the calculation if it's shape in a particular dimension
- either matches the output shape or has value exactly 1.
-\end_layout
-
-\begin_layout Enumerate
-If an input has a dimension size of 1 in its shape, the first data entry
- in that dimension will be used for all calculations along that dimension.
- In other words, the stepping machinery of the ufunc will simply not step
- along that dimension when otherwise needed (the stride will be 0 for that
- dimension).
-
-\end_layout
-
-\begin_layout Standard
-While perhaps a bit difficult to explain, broadcasting can be quite useful
- and becomes second nature rather quickly.
- Broadcasting is used throughout NumPy to decide how to handle non equally-shape
-d arrays.
-
-\end_layout
-
-\begin_layout Subsection
-Output type determination
-\end_layout
-
-\begin_layout Standard
-The output of the ufunc (and its methods) does not have to be an ndarray.
- All output arrays will be passed to the __array_wrap__ method of any input
- (besides ndarrays, and scalars) that defines it
-\series bold
-and
-\series default
- has the highest __array_priority__ of any other input to the universal
- function.
- The default __array_priority__ of the ndarray is 0.0, and the default __array_pr
-iority__ of a subtype is 1.0.
- Matrices have __array_priority__ equal to 10.0.
-
-\end_layout
-
-\begin_layout Standard
-The ufuncs can also all take output arguments.
- The output will be cast if necessary to the provided output array.
- If a class with an __array__ method is used for the output, results will
- be written to the object returned by __array__.
- Then, if the class also has an __array_wrap__ method, the returned
-\family typewriter
-ndarray
-\family default
- result will be passed to that method just before passing control back to
- the caller.
-
-\end_layout
-
-\begin_layout Subsection
-Use of internal buffers
-\end_layout
-
-\begin_layout Standard
-Internally, buffers are used for misaligned data, swapped data, and data
- that has to be converted from one data type to another.
- The size of the internal buffers is settable on a per-thread basis.
- There can be up to
-\begin_inset Formula $2\left(n_{i}+n_{o}\right)$
-\end_inset
-
- buffers of the specified size created to handle the data from all the inputs
- and outputs of a ufunc.
- The default size of the buffer is 10,000 elements.
- Whenever buffer-based calculation would be needed, but all input arrays
- are smaller than the buffer size, those misbehaved or incorrect typed arrays
- will be copied before the calculation proceeds.
- Adjusting the size of the buffer may therefore alter the speed at which
- ufunc calculations of various sorts are completed.
- A simple interface for setting this variable is accessible using the function
-
-\end_layout
-
-\begin_layout Description
-setbufsize (size)
-\begin_inset LatexCommand index
-name "setbufsize"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Set the buffer size to the given number of elements in the current thread.
- Return the old buffer size (so that it can be reset later if desired).
-
-\end_layout
-
-\begin_layout Subsection
-Error handling
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "error handling"
-
-\end_inset
-
-Universal functions can trip special floating point status registers in
- your hardware (such as divide-by-zero).
- If available on your platform, these registers will be regularly checked
- during calculation.
- The user can determine what should be done if errors are encountered.
- Error handling is controlled on a per-thread basis.
- Four errors can be individually configured: divide-by-zero, overflow, underflow
-, and invalid.
- The errors can each be set to ignore, warn, raise, or call.
- The easiest way to configure the error mask is using the function
-\end_layout
-
-\begin_layout Description
-seterr (all=None, divide=None, over=None, under=None, invalid=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset LatexCommand index
-name "seterr"
-
-\end_inset
-
-This will set the current thread so that errors can be handled if desired.
- If one of the errors is set to 'call', then a function must be provided
- using the seterrcall() routine.
- If any of the arguments are None, then that error mask will be unchanged.
- The return value of this function is a dictionary with the old error conditions.
- Thus, you can restore the old condition after you are finished with your
- function by calling seterr(**old).
- If all is set, then all errors will be set to the specified value.
-
-\end_layout
-
-\begin_layout Description
-seterrcall (callable)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset LatexCommand index
-name "seterrcall"
-
-\end_inset
-
-This sets the function to call when an error is triggered for an error condition
- configured with the
-\begin_inset Quotes eld
-\end_inset
-
-call
-\begin_inset Quotes erd
-\end_inset
-
- handler.
- This function should take two arguments: a string showing the type of error
- that triggered the call, and an integer showing the state of the floating
- point status registers.
- Any return value of the call function will be ignored, but errors can be
- raised by the function.
- Only one error function handler can be specified for all the errors.
- The status argument shows which errors were raised.
- The return value of this routine is the old callable.
- The argument passed in to this function must be any callable object with
- the right signature or None.
-
-\end_layout
-
-\begin_layout Note
-FPE_DIVIDEBYZERO, FPE_OVERFLOW, FPE_UNDERFLOW, and FPE_INVALID, are all
- defined constants in NumPy.
- The status flag returned for a 'call' error handling type shows which errors
- were raised by adding these constants together.
-\end_layout
-
-\begin_layout Subsection
-Optional keyword arguments
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "ufunc!keyword arguments"
-
-\end_inset
-
-All ufuncs take optional keyword arguments.
- These represent rather advanced usage and will likely not be used by most
- users.
-
-\end_layout
-
-\begin_layout Description
-sig= either a data-type, a tuple of data-types, or a special signature string
- indicating the input and output types of a ufunc.
- This argument allows you to specify a specific signature for a the 1-d
- loop to use in the underlying calculation.
- If the loop specified does not exist for the ufunc, then a TypeError is
- raised.
- Normally a suitable loop is found automatically by comparing the input
- types with what is available and searching for a loop with data-types to
- which all inputs can be cast safely.
- This key-word argument lets you by-pass that search and choose a loop you
- want.
- A list of available signatures is available in the
-\series bold
-types
-\series default
- attribute of the ufunc object.
-
-\end_layout
-
-\begin_layout Description
-extobj= a list of length 1, 2, or 3 specifying the ufunc buffer-size, the
- error mode integer, and the error call-back function.
- Normally, these values are looked-up in a thread-specific dictionary.
- Passing them here bypasses that look-up and uses the low-level specification
- provided for the error-mode.
- This may be useful as an optimization for calculations requiring lots of
- ufuncs on small arrays in a loop.
-
-\end_layout
-
-\begin_layout Section
-Attributes
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "ufunc!attributes"
-
-\end_inset
-
-There are some informational attributes that universal functions possess.
- None of the attributes can be set.
-
-\end_layout
-
-\begin_layout Description
-__doc__
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A docstring for each ufunc.
- The first part of the docstring is dynamically generated from the number
- of outputs, the name, and the number of inputs.
- The second part of the doc string is provided at creation time and stored
- with the ufunc.
-
-\end_layout
-
-\begin_layout Description
-__name__
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The name of this ufunc.
-\end_layout
-
-\begin_layout Description
-nin
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The number of inputs
-\end_layout
-
-\begin_layout Description
-nout
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The number of outputs
-\end_layout
-
-\begin_layout Description
-nargs
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The total number of inputs + outputs
-\end_layout
-
-\begin_layout Description
-ntypes
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The total number of different types for which this ufunc is defined.
-\end_layout
-
-\begin_layout Description
-types
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A list of length ntypes containing strings showing the types for which
- this ufunc is defined.
- Other types may still be used as inputs (and as output arrays), they will
- just need casting.
- For inputs, standard casting rules will be used to determine which of the
- supplied internal functions that will be used (and therefore the default
- type of the output).
- Results will always be force-cast to any array provided to hold the output.
-
-\end_layout
-
-\begin_layout Description
-identity
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A 1, 0, or None to show the identity for this universal function.
- This identity is used for reduction on zero-sized arrays (arrays with a
- shape that includes a 0).
-\end_layout
-
-\begin_layout Standard
-\begin_inset Float table
-wide false
-sideways false
-status open
-
-\begin_layout Standard
-\begin_inset Caption
-
-\begin_layout Standard
-Universal function (ufunc) attributes.
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\align center
-\begin_inset Tabular
-<lyxtabular version="3" rows="9" columns="2">
-<features>
-<column alignment="center" valignment="top" leftline="true" width="0">
-<column alignment="center" valignment="top" leftline="true" rightline="true" width="0">
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Name
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Description
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-__doc__
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Dynamic docstring.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-__name__
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Name of ufunc
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-nin
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Number of input arguments
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-nout
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Number of output arguments
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-nargs
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Total number of arguments
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-ntypes
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Number of defined inner loops.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-types
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-List showing types for which inner loop is defined.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-identity
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Identity for this ufunc.
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Casting Rules
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "ufunc!casting rules"
-
-\end_inset
-
-At the core of every ufunc is a one-dimensional strided loop that implements
- the actual function for a specific type combination.
- When a ufunc is created, it is given a static list of inner loops and a
- corresponding list of type signatures over which the ufunc operates.
- The ufunc machinery uses this list to determine which inner loop to use
- for a particular case.
- You can inspect the
-\family typewriter
-.types
-\family default
- attribute for a particular ufunc to see which type combinations have a
- defined inner loop and which output type they produce (the character codes
- are used in that output for brevity).
-
-\end_layout
-
-\begin_layout Standard
-Casting must be done on one or more of the inputs whenever the ufunc does
- not have a core loop implementation for the input types provided.
- If an implementation for the input types cannot be found, then the algorithm
- searches for an implementation with a type signature to which all of the
- inputs can be cast
-\begin_inset Quotes eld
-\end_inset
-
-safely.
-\begin_inset Quotes erd
-\end_inset
-
- The first one it finds in its internal list of loops is selected and performed
- with types cast.
- Recall that internal copies during ufuncs (even for casting) are limited
- to the size of an internal buffer which is user settable.
-
-\end_layout
-
-\begin_layout Note
-Universal functions in NumPy are flexible enough to have mixed type signatures.
- Thus, for example, a universal function could be defined that works with
- floating point and integer values.
- See ldexp for an example.
-\end_layout
-
-\begin_layout Standard
-By the above description, the casting rules are essentially implemented
- by the question of when a data type can be cast
-\begin_inset Quotes eld
-\end_inset
-
-safely
-\begin_inset Quotes erd
-\end_inset
-
- to another data type.
- The answer to this question can be determined in Python with a function
- call: can_cast (fromtype, totype).
- Figure shows the results of this call for my 32-bit system on the 21 internally
- supported types.
- You can generate this table for your system with code shown in that Figure.
-\end_layout
-
-\begin_layout Standard
-\begin_inset Float figure
-wide false
-sideways false
-status open
-
-\begin_layout MyCode
->>> def print_table(ntypes):
-\newline
-...
- print 'X',
-\newline
-...
- for char in ntypes: print char,
-\newline
-...
- print
-\newline
-...
- for row in ntypes:
-\newline
-...
- print row,
-\newline
-...
- for col in ntypes:
-\newline
-...
- print int(can_cast(row, col)),
-\newline
-...
- print
-\newline
->>> print_table(typecodes['All'])
-\newline
-X ? b h i l q p B H I L Q
- P f d g F D G S U V O
-\newline
-? 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-\newline
-b 0
- 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
-\newline
-h 0 0 1 1 1 1 1 0 0 0 0 0 0
- 1 1 1 1 1 1 1 1 1 1
-\newline
-i 0 0 0 1 1 1 1 0 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1
-\newline
-l 0 0
- 0 1 1 1 1 0 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1
-\newline
-q 0 0 0 0 0 1 0 0 0 0 0 0 0 0
- 1 1 0 1 1 1 1 1 1
-\newline
-p 0 0 0 1 1 1 1 0 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1
-\newline
-B 0 0 1
- 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-\newline
-H 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1
- 1 1 1 1 1 1 1 1
-\newline
-I 0 0 0 0 0 1 0 0 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1
-\newline
-L 0 0 0 0
- 0 1 0 0 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1
-\newline
-Q 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1
- 0 1 1 1 1 1 1
-\newline
-P 0 0 0 0 0 1 0 0 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1
-\newline
-f 0 0 0 0 0
- 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
-\newline
-d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0
- 1 1 1 1 1 1
-\newline
-g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 1 1
-\newline
-F 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1
-\newline
-D 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
- 1 1 1 1 1
-\newline
-G 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
-\newline
-S 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
-\newline
-U 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 1 1 1
-\newline
-V 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
-\newline
-O 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
-\end_layout
-
-\begin_layout Standard
-\begin_inset Caption
-
-\begin_layout Standard
-Code segment showing the can cast safely table for a 32-bit system.
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-You should note that, while included in the table for completeness, the
- 'S', 'U', and 'V' types cannot be operated on by ufuncs.
- Also, note that on a 64-bit system the integer types may have different
- sizes resulting in a slightly altered table.
-
-\end_layout
-
-\begin_layout Standard
-Mixed scalar-array operations use a different set of casting rules that
- ensure that a scalar cannot upcast an array unless the scalar is of a fundament
-ally different kind of data (
-\emph on
-i.e.
-
-\emph default
- under a different hierachy in the data type hierarchy) then the array.
- This rule enables you to use scalar constants in your code (which as Python
- types are interpreted accordingly in ufuncs) without worrying about whether
- the precision of the scalar constant will cause upcasting on your large
- (small precision) array.
-
-\end_layout
-
-\begin_layout Section
-Methods
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "ufunc!methods|("
-
-\end_inset
-
-All ufuncs have 4 methods.
- However, these methods only make sense on ufuncs that take two input arguments
- and return one output argument.
- Attempting to call these methods on other ufuncs will cause a
-\family typewriter
-ValueError
-\family default
-.
- The reduce-like methods all take an axis keyword and a dtype keyword, and
- the arrays must all have dimension >= 1.
- The
-\emph on
-axis
-\emph default
- keyword specifies which axis of the array the reduction will take place
- over and may be negative, but must be an integer.
- The
-\emph on
-dtype
-\emph default
- keyword allows you to manage a very common problem that arises when naively
- using <op>.reduce.
- Sometimes you may have an array of a certain data type and wish to add
- up all of its elements, but the result does not fit into the data type
- of the array.
- This commonly happens if you have an array of single-byte integers.
- The dtype keyword allows you to alter the data type that the reduction
- takes place over (and therefore the type of the output).
- Thus, you can ensure that the output is a data type with large-enough precision
- to handle your output.
- The responsibility of altering the reduce type is mostly up to you.
- There is one exception: if no dtype is given for a reduction on the
-\begin_inset Quotes eld
-\end_inset
-
-add
-\begin_inset Quotes erd
-\end_inset
-
- or
-\begin_inset Quotes eld
-\end_inset
-
-multiply
-\begin_inset Quotes erd
-\end_inset
-
- operations, then if the input type is an integer (or boolean) data-type
- and smaller than the size of the int_ data type, it will be internally
- upcast to the int_ (or uint) data type.
-
-\end_layout
-
-\begin_layout Warning
-A reduce-like operation on an array with a data type that has range
-\begin_inset Quotes eld
-\end_inset
-
-too small
-\begin_inset Quotes erd
-\end_inset
-
- to handle the result will silently wrap.
- You should use dtype to increase the data type over which reduction takes
- place.
-\end_layout
-
-\begin_layout Subsection
-Reduce
-\end_layout
-
-\begin_layout Description
-<op>.reduce (array=, axis=0, dtype=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset LatexCommand index
-name "ufunc!methods!reduce"
-
-\end_inset
-
-For each one-dimensional sequence along the
-\emph on
-axis
-\emph default
- dimension of the array, return a single number resulting from recursively
- applying the operation to succesive elements along that dimension.
- If the input array has
-\begin_inset Formula $N$
-\end_inset
-
- dimensions, then the returned array has
-\begin_inset Formula $N-1$
-\end_inset
-
- dimensions.
- This produces the equivalent of the following Python code :
-\end_layout
-
-\begin_layout LyX-Code
->>> indx = [index_exp[:]]*array.ndim
-\newline
->>> indx[axis] = 0; N=array.shape[axis]
-\newline
->>>
- result = array[indx].astype(dtype)
-\newline
->>> for i in range(1,N):
-\newline
-...
- indx[axis] = i
-\newline
-...
- <op>(result, array[indx], result)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Studying the above code can also help you gain an appreciation for how
- to do generic indexing in Python using
-\family typewriter
-index_exp
-\family default
-.
- For example, if <op> is add, then <op>.reduce produces a summation along
- the given axis.
- If <op> is prod, then a repeated multiply is performed.
-\end_layout
-
-\begin_layout Subsection
-Accumulate
-\end_layout
-
-\begin_layout Description
-<op>.accumulate (array=, axis=0, dtype=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset LatexCommand index
-name "ufunc!methods!accumulate"
-
-\end_inset
-
-This method is similar to reduce, except it returns an array of the same
- shape as the input, and keeps intermediate calculations.
- The operation is still performed along the access.
- This method underlies the operations of the cumsum and cumprod methods
- of arrays.
- The following Python code implements an equivalent of the accumulate method.
-\end_layout
-
-\begin_layout LyX-Code
->>> i1 = [index_exp[:]]*array.ndim
-\newline
->>> i2 = [index_exp[:]]*array.ndim
-\newline
->>> i1[axis]
- = 0; N=array.shape[axis]
-\newline
->>> result = array.astype(dtype)
-\newline
->>> for i in range(1,N):
-\newline
-...
- i1[axis] = i
-\newline
-...
- i2[axis] = i-1
-\newline
-...
- <op>(result[i1], array[i1], result[i2])
-\end_layout
-
-\begin_layout Subsection
-Reduceat
-\end_layout
-
-\begin_layout Description
-<op>.reduceat (array=, indices=, axis=0, dtype=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset LatexCommand index
-name "ufunc!methods!reduceat"
-
-\end_inset
-
-This method is a generalization of both reduce and accumulate.
- It offers the ability to reduce along an axis but only between certain
- indices.
- The indices input must be a one dimensional (index) sequence.
- Then, if
-\begin_inset Formula $I_{k}$
-\end_inset
-
- is the
-\begin_inset Formula $k^{\textrm{th}}$
-\end_inset
-
- element of indices, the reduceat method computes <op>.reduce(array[
-\begin_inset Formula $I_{k}$
-\end_inset
-
-:
-\begin_inset Formula $I_{k+1}$
-\end_inset
-
-]).
- This formula assumes
-\begin_inset Formula $I_{k+1}>I_{k}$
-\end_inset
-
-, and also that
-\begin_inset Formula $I_{k+1}$
-\end_inset
-
- is the length of the input array when
-\begin_inset Formula $I_{k}$
-\end_inset
-
- is the last element.
- There is no requirement that the indices be monotonic.
- If
-\begin_inset Formula $I_{k+1}\leq I_{k},$
-\end_inset
-
- then reduceat simply returns array[
-\begin_inset Formula $I_{k}$
-\end_inset
-
-] for that particular element of indices.
- In these formulas, we have assumed that array is one dimensional (or axis
- is 0).
- If the array is
-\begin_inset Formula $N$
-\end_inset
-
--dimensional and axis>0, then the index expression needs axis ':' (full
- slice objects) inserted (i.e.
- array[
-\begin_inset Formula $\underbrace{:,\ldots,:}_{\textrm{axis}},I_{k}:I_{k+1}$
-\end_inset
-
-]).
- The effect is to slice along the axis dimension.
- Equivalent Python code is
-\end_layout
-
-\begin_layout LyX-Code
->>> i1 = [index_exp[:]]*array.ndim
-\newline
->>> i2 = [index_exp[:]]*array.ndim
-\newline
->>> outshape
- = list(array.shape)
-\newline
->>> N = array.shape[axis]
-\newline
->>> outshape[axis] = len(indices)
-\newline
->>>
- result = zeros(outshape, dtype or array.dtype)
-\newline
->>> for k,Ik in enumerate(indices
-):
-\newline
-...
- i1[axis] = k
-\newline
-...
- try:
-\newline
-...
- Ikp1 = indices[k+1]
-\newline
-...
- except IndexError:
-\newline
-...
- Ikp1 = N
-\newline
-...
- if (Ikp1 > Ik):
-\end_layout
-
-\begin_layout LyX-Code
-...
- i2[axis] = index_exp[Ik:Ikp1]
-\newline
-...
- result[i1] = <op>.reduce(array[i2],axis=axis,dtype=dtype)
-\newline
-...
- else:
-\newline
-...
- result[i1] = array[Ik].astype(dtype)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The returned array has as many dimensions as the input array, and is the
- same shape except for the
-\emph on
-axis
-\emph default
- dimension which has shape equal to the length of indices (the number of
- reduce operations that were performed).
- If you ever have a need to compute multiple reductions over portions of
- an array, then (if you can get your mind around what it is doing) reduceat
- may be just what you were looking for.
-
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-Example: Suppose a is a two-dimensional array of shape
-\begin_inset Formula $10\times20$
-\end_inset
-
-.
- Then, res=add.reduce (a, [0,3,1]) returns a
-\begin_inset Formula $3\times20$
-\end_inset
-
- array with res[0,:] = add.reduce(a[:,0:3]), res[1,:] = a[:,3], and res[2,:]
- = add.reduce(a[:,1:]).
-
-\end_layout
-
-\end_deeper
-\begin_layout Subsection
-Outer
-\end_layout
-
-\begin_layout Description
-<op>.outer (a, b)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset LatexCommand index
-name "ufunc!methods!outer"
-
-\end_inset
-
-This method computes an outer operation on <op>.
- It computes <op>(a2, b2) where a2 is 'a' with b.ndim 1's post-pended to
- it's shape and b2 is 'b' with a.ndim 1's pre-pended to its shape (broadcasting
- takes care of this automatically in the code below).
- The return shape has a.ndim + b.ndim dimensions.
- Equivalent Python code is
-\end_layout
-
-\begin_layout LyX-Code
->>> a.shape += (1,)*b.ndim
-\newline
->>> <op>(a,b)
-\newline
->>> a = a.squeeze()
-\end_layout
-
-\begin_layout Standard
-\InsetSpace ~
- Among many other uses, arithmetic tables can be conveniently built using
- outer:
-\begin_inset LatexCommand index
-name "ufunc!methods|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout MyCode
->>> multiply.outer([1,7,9,12],arange(5,12))
-\newline
-array([[ 5, 6, 7, 8,
- 9, 10, 11],
-\newline
- [ 35, 42, 49, 56, 63, 70, 77],
-\newline
- [ 45, 54,
- 63, 72, 81, 90, 99],
-\newline
- [ 60, 72, 84, 96, 108, 120, 132]])
-\end_layout
-
-\begin_layout Section
-Available ufuncs
-\end_layout
-
-\begin_layout Standard
-There are currently more than 60 universal functions defined on one or more
- types, covering a wide variety of operations.
- Some of these ufuncs are called automatically on arrays when the relevant
- infix notation is used (i.e.
- add(a,b) is called internally when a + b is written and a or b is an ndarray).
- Nonetheless, you may still want to use the ufunc call in order to use the
- optional output argument(s) to place the output(s) in an object (or in
- objects) of your choice.
-
-\end_layout
-
-\begin_layout Standard
-Recall that each ufunc operates element-by-element.
- Therefore, each ufunc will be described as if acting on a set of scalar
- inputs to return a set of scalar outputs.
-\end_layout
-
-\begin_layout Note
-The ufunc still returns its output(s) even if you use the optional output
- argument(s).
-
-\end_layout
-
-\begin_layout Subsection
-Math operations
-\end_layout
-
-\begin_layout Description
-add (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "add"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=x_{1}+x_{2}$
-\end_inset
-
-.
- Called to implement
-\family typewriter
-x1+x2
-\family default
- for arrays
-\end_layout
-
-\begin_layout Description
-subtract (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "subtract"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=x_{1}-x_{2}$
-\end_inset
-
-.
- Called to implement
-\family typewriter
-x1-x2
-\family default
- for arrays
-\end_layout
-
-\begin_layout Description
-multiply (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "multiply"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=x_{1}\cdot x_{2}$
-\end_inset
-
-.
- Called to implement
-\family typewriter
-x1*x2
-\family default
- for arrays.
-\end_layout
-
-\begin_layout Description
-divide (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "divide"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=x_{1}/x_{2}$
-\end_inset
-
- Integer division results in truncation.
- Floating-point does not.
- Called to implement
-\family typewriter
-x1/x2
-\family default
- for arrays (when __future__.division is not active).
-
-\end_layout
-
-\begin_layout Description
-true_divide (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "true\\_divide"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This version of division always returns an inexact number so that integer
- division returns floating point.
- Called with __future__.division is active to implement
-\family typewriter
-x1/x2
-\family default
- for arrays.
-\end_layout
-
-\begin_layout Description
-floor_divide (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "floor\\_divide"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This version of division always results in truncation of an fractional
- part remaining.
- Called to implement
-\family typewriter
-x1//x2
-\family default
- for arrays.
-\end_layout
-
-\begin_layout Description
-negative (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "negative"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=-x$
-\end_inset
-
-.
- Called to implement
-\family typewriter
--x
-\family default
- for arrays.
-\end_layout
-
-\begin_layout Description
-power (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "power"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=x_{1}^{x_{2}}$
-\end_inset
-
-.
- There is no three-term power ufunc defined.
- This two-term power function is called to implement
-\family typewriter
-pow(x1,x2,<any>)
-\family default
- or
-\family typewriter
-x1**x2
-\family default
- for arrays.
- Note that the third term in
-\family typewriter
-pow
-\family default
- is ignored for array arguments.
-\end_layout
-
-\begin_layout Description
-remainder (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "remainder"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns
-\begin_inset Formula $x-y$
-\end_inset
-
-*floor(
-\begin_inset Formula $x/y$
-\end_inset
-
-).
- Result has the sign of
-\begin_inset Formula $y$
-\end_inset
-
-.
- Called to implement
-\family typewriter
-x1%x2
-\family default
-.
-\end_layout
-
-\begin_layout Description
-mod (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Same as remainder (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-]).
-
-\end_layout
-
-\begin_layout Description
-fmod (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $x_{1}=kx_{2}+y$
-\end_inset
-
- where
-\begin_inset Formula $k$
-\end_inset
-
- is the largest integer satisfying this equation.
- Computes C-like
-\begin_inset Formula $x_{1}\%x_{2}$
-\end_inset
-
- element-wise.
- This was the behavior of
-\family typewriter
-x1%x2
-\family default
- in old Numeric.
-\end_layout
-
-\begin_layout Description
-absolute (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "absolute"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=\left|x\right|.$
-\end_inset
-
- Called to implement
-\family typewriter
-abs(x)
-\family default
- for arrays.
-
-\end_layout
-
-\begin_layout Description
-rint (x, [, y])
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Round
-\begin_inset Formula $x$
-\end_inset
-
- to the nearest integer.
- Rounds half-way cases to the nearest even integer.
-\end_layout
-
-\begin_layout Description
-sign (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Sets
-\begin_inset Formula $y$
-\end_inset
-
- according to
-\begin_inset Formula \[
-\textrm{sign}\left(x\right)=\left\{ \begin{array}{cc}
-1 & x:>0,\\
-0 & x=0,\\
--1 & x<0.\end{array}\right.\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-conj (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "conj"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-conjugate (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "conjugate"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=\overline{x}$
-\end_inset
-
-; in other words, the complex conjugate of
-\begin_inset Formula $x$
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Description
-exp (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "exp"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=e^{x}.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-log (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "log"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=\log\left(x\right)$
-\end_inset
-
-.
- In other words,
-\begin_inset Formula $y$
-\end_inset
-
- is the number so that
-\begin_inset Formula $e^{y}=x$
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Description
-expm1 (
-\begin_inset Formula $x$
-\end_inset
-
-, [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=e^{x}-1.$
-\end_inset
-
- Calculated so that it is accurate for small
-\begin_inset Formula $\left|x\right|.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-log1p (
-\begin_inset Formula $x$
-\end_inset
-
-, [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=\log\left(1+x\right)$
-\end_inset
-
- but accurate for small
-\begin_inset Formula $\left|x\right|.$
-\end_inset
-
- Returns the number
-\begin_inset Formula $y$
-\end_inset
-
- such that
-\begin_inset Formula $e^{y}-1=x$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-log10 (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "log10"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=\log10\left(x\right)$
-\end_inset
-
-.
- In other words,
-\begin_inset Formula $y$
-\end_inset
-
- is the number so that
-\begin_inset Formula $10^{y}=x.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-sqrt (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "sqrt"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=\sqrt{x}.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-square (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=x*x$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-reciprocal (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=1/x$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-ones_like (
-\begin_inset Formula $x$
-\end_inset
-
-, [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset Formula $y=1$
-\end_inset
-
- If an output argument is not given the returned data-type is the same as
- the input data type.
-\end_layout
-
-\begin_layout Tip
-The optional output arguments can be used to help you save memory for large
- calculations.
- If your arrays are large, complicated expressions can take longer than
- absolutely necessary due to the creation and (later) destruction of temporary
- calculation spaces.
- For example, the expression 'G=a*b+c' is equivalent to t1=A*B; G=T1+C;
- del t1; It will be more quickly executed as G=A*B; add(G,C,G) which is
- the same as G=A*B; G+=C.
-\end_layout
-
-\begin_layout Subsection
-Trigonometric functions
-\end_layout
-
-\begin_layout Standard
-All trigonometric functions use radians when an angle is called for.
- The ratio of degrees to radians is
-\begin_inset Formula $180^{\circ}/\pi.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-sin (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "sin"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-cos (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "cos"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-tan (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "tan"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The standard trignometric functions.
-
-\begin_inset Formula $y=\sin\left(x\right),$
-\end_inset
-
-
-\begin_inset Formula $y=\cos\left(x\right),$
-\end_inset
-
- and
-\begin_inset Formula $y=\tan\left(x\right).$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-arcsin (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "arcsin"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-arccos (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "arccos"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-arctan (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "arctan"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The inverse trigonometric functions:
-\begin_inset Formula $y=\sin^{-1}\left(x\right),$
-\end_inset
-
-
-\begin_inset Formula $y=\cos^{-1}\left(x\right)$
-\end_inset
-
-,
-\begin_inset Formula $y=\tan^{-1}\left(x\right).$
-\end_inset
-
- These return the value of
-\begin_inset Formula $y$
-\end_inset
-
- (in radians) such that
-\begin_inset Formula $\sin\left(y\right)=x$
-\end_inset
-
- with
-\begin_inset Formula $y\in\left[-\frac{\pi}{2},\frac{\pi}{2}\right]$
-\end_inset
-
-;
-\begin_inset Formula $\cos\left(y\right)=x$
-\end_inset
-
- with
-\begin_inset Formula $y\in\left[0,\pi\right]$
-\end_inset
-
-; and
-\begin_inset Formula $\tan\left(y\right)=x$
-\end_inset
-
- with
-\begin_inset Formula $y\in\left[-\frac{\pi}{2},\frac{\pi}{2}\right]$
-\end_inset
-
-, respectively.
-
-\end_layout
-
-\begin_layout Description
-arctan2 (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "arctan2"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns
-\begin_inset Formula $\tan^{-1}\left(\frac{x_{1}}{x_{2}}\right)$
-\end_inset
-
- but takes into account the sign on
-\begin_inset Formula $x_{1}$
-\end_inset
-
- and
-\begin_inset Formula $x_{2}$
-\end_inset
-
- to place the angle in the correct quadrant.
- The angle
-\begin_inset Formula $y$
-\end_inset
-
- is returned in the full range
-\begin_inset Formula $-\pi<y\leq\pi$
-\end_inset
-
-.
- The angle is chosen so that
-\begin_inset Formula $\sin\left(y\right)=\frac{x_{1}}{\sqrt{x_{1}^{2}+x_{2}^{2}}},$
-\end_inset
-
- and
-\begin_inset Formula $\cos\left(y\right)=\frac{x_{2}}{\sqrt{x_{1}^{2}+x_{2}^{2}}}.$
-\end_inset
-
- Particular values are showin in the following table:
-\end_layout
-
-\begin_layout Standard
-\align center
-\begin_inset Tabular
-<lyxtabular version="3" rows="5" columns="3">
-<features>
-<column alignment="center" valignment="top" leftline="true" width="0">
-<column alignment="center" valignment="top" leftline="true" width="0">
-<column alignment="center" valignment="top" leftline="true" rightline="true" width="0">
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-\begin_inset Formula $x_{1}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-\begin_inset Formula $x_{2}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-\begin_inset Formula $y=\textrm{arctan2}\left(x_{1},x_{2}\right)$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-0
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-1
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-0
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-1
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-0
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-\begin_inset Formula $\frac{\pi}{2}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-0
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
--1
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-\begin_inset Formula $\pi$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
--1
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-0
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-\begin_inset Formula $-\frac{\pi}{2}$
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-hypot (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "hypot"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns
-\begin_inset Formula $y=\sqrt{x_{1}^{2}+x_{2}^{2}}.$
-\end_inset
-
- Given a complex number in cartesian form, arctan2 and hypot can be used
- to compute phase and magnitude, quickly.
-\end_layout
-
-\begin_layout Description
-sinh (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "sinh"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Computes
-\begin_inset Formula $y=\sinh\left(x\right)$
-\end_inset
-
- which is defined as
-\begin_inset Formula $\frac{1}{2}\left(e^{x}-e^{-x}\right).$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-cosh (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "cosh"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Computes
-\begin_inset Formula $y=\cosh\left(x\right)$
-\end_inset
-
- which is defined as
-\begin_inset Formula $\frac{1}{2}\left(e^{x}+e^{-x}\right).$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-tanh (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "tanh"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Computes
-\begin_inset Formula $y=\tanh\left(x\right)$
-\end_inset
-
- which is defined as
-\begin_inset Formula $\left(e^{x}-e^{-x}\right)/\left(e^{x}+e^{-x}\right).$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-arcsinh (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "arcsinh"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-arccosh (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "arccosh"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-arctanh (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "arctanh"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- These compute the inverse hyperpolic functions.
-
-\begin_inset Formula $y=\textrm{arc}func\left(x\right)$
-\end_inset
-
- is the (principal) value of
-\begin_inset Formula $y$
-\end_inset
-
- such that
-\begin_inset Formula $func\left(y\right)=x.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-Bit-twiddling functions
-\end_layout
-
-\begin_layout Standard
-These function all need integer arguments and they maniuplate the bit-pattern
- of those arguments.
-\end_layout
-
-\begin_layout Description
-bitwise_and (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "bitwise\\_and"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Each bit in
-\begin_inset Formula $y$
-\end_inset
-
- is the result of a bit-wise 'and' operation on the corresponding bits in
-
-\begin_inset Formula $x_{1}$
-\end_inset
-
- and
-\begin_inset Formula $x_{2}$
-\end_inset
-
-.
- Called to implement
-\family typewriter
-x1&x2
-\family default
- for arrays.
-
-\end_layout
-
-\begin_layout Description
-bitwise_or (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "bitwise\\_or"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Each bit in
-\begin_inset Formula $y$
-\end_inset
-
- is the result of a bit-wise 'or' operation on the corresponding bits in
-
-\begin_inset Formula $x_{1}$
-\end_inset
-
- and
-\begin_inset Formula $x_{2}$
-\end_inset
-
-.
- Called to implement
-\family typewriter
-x1|x2
-\family default
- for arrays.
-\end_layout
-
-\begin_layout Description
-bitwise_xor (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "bitwise\\_xor"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Each bit in
-\begin_inset Formula $y$
-\end_inset
-
- is the result of a bit-wise 'xor' operation on the corresponding bits in
-
-\begin_inset Formula $x_{1}$
-\end_inset
-
- and
-\begin_inset Formula $x_{2}$
-\end_inset
-
-.
- An xor operation sets the output to 1 if one and only one of the input
- bits is 1.
- Called to implement
-\family typewriter
-x1^x2
-\family default
- for arrays.
- Using the bitwise_xor operation and the optional output argument you can
- swap the values of two integer arrays of equivalent types without using
- temporary arrays.
-\end_layout
-
-\begin_layout MyCode
->>> a=arange(10)
-\newline
->>> b=arange(10,20)
-\newline
->>> bitwise_xor(a,b,a); bitwise_xor(a,b,b);
-\newline
->>
-> bitwise_xor(a,b,a)
-\newline
-array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
-\newline
->>> print
- a; print b
-\newline
-[10 11 12 13 14 15 16 17 18 19]
-\newline
-[0 1 2 3 4 5 6 7 8 9]
-\end_layout
-
-\begin_layout Description
-invert (
-\begin_inset Formula $x$
-\end_inset
-
-, [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "invert"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Each bit in
-\begin_inset Formula $y$
-\end_inset
-
- is the opposite of the corresponding bit in
-\begin_inset Formula $x$
-\end_inset
-
-.
- Called to implement
-\family typewriter
-~x
-\family default
- for arrays.
-\end_layout
-
-\begin_layout Description
-left_shift (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "left\\_shift"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Shifts the bits of
-\begin_inset Formula $x_{1}$
-\end_inset
-
- to the left by
-\begin_inset Formula $x_{2}$
-\end_inset
-
-.
- Called to implement
-\family typewriter
-x1<<x2
-\family default
- for arrays.
- Provided there is no overflow, the result is equal to
-\begin_inset Formula $y=x_{1}2^{x_{2}}.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-right_shift (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "right\\_shift"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Shifts the bits of
-\begin_inset Formula $x_{1}$
-\end_inset
-
- to the right by
-\begin_inset Formula $x_{2}$
-\end_inset
-
-.
- Called to implement
-\family typewriter
-x1>>x2
-\family default
- for arrays.
- Absent overflow, the result is equal to
-\begin_inset Formula $y=x_{1}2^{-x_{2}}$
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Subsection
-Comparison functions
-\end_layout
-
-\begin_layout Standard
-All of these functions (except maximum, minimum, and sign) return Boolean
- arrays.
-
-\end_layout
-
-\begin_layout Description
-greater (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "greater"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-greater_equal (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "greater\\_equal"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-less (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "less"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-less_equal (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "less\\_equal"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-not_equal (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "not\\_equal"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-equal (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "equal"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- These functions are called to implement
-\family typewriter
-x1>x2
-\family default
-,
-\family typewriter
-x1>=x2
-\family default
-,
-\family typewriter
-x1<x2
-\family default
-,
-\family typewriter
-x1<=x2
-\family default
-,
-\family typewriter
-x1!=x2
-\family default
- (or
-\family typewriter
-x1<>x2
-\family default
-), and
-\family typewriter
-x1==x2
-\family default
-, respectively, for arrays.
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The fact that these functions return Boolean arrays make them very useful
- in combination with advanced array indexing.
- Thus, for example, arr[arr>10] = 10 clips large values to 10.
- Used in conjunction with bitwise operators quite complicated expressions
- are possible.
- For example, arr[~((arr<10)&(arr>5))] = 0 clips all values outside of the
- range
-\begin_inset Formula $\left(5,10\right)$
-\end_inset
-
- to 0.
-
-\end_layout
-
-\begin_layout Warning
-Do not use the Python keywords
-\family typewriter
-and
-\family default
- and
-\family typewriter
-or
-\family default
- to combine logical array expressions.
- These keywords will test the truth value of the entire array (not element-by-el
-ement as you might expect).
- Use the bitwise operators: & and | instead.
-\end_layout
-
-\begin_layout Description
-logical_and (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "logical\\_and"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The output is the truth value of
-\begin_inset Formula $x_{1}$
-\end_inset
-
-
-\series bold
-and
-\series default
-
-\begin_inset Formula $x_{2}$
-\end_inset
-
-.
- Numbers equal to 0 are considered False.
- Nonzero numbers are True.
-\end_layout
-
-\begin_layout Description
-logical_or (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "logical\\_or"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The output,
-\begin_inset Formula $y$
-\end_inset
-
-, is the truth value of
-\begin_inset Formula $x_{1}$
-\end_inset
-
-
-\series bold
-or
-\begin_inset Formula $x_{2}$
-\end_inset
-
-
-\series default
- .
-\end_layout
-
-\begin_layout Description
-logical_xor (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "logical\\_xor"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The output,
-\begin_inset Formula $y$
-\end_inset
-
-, is the truth value of
-\begin_inset Formula $x_{1}$
-\end_inset
-
-
-\series bold
-xor
-\begin_inset Formula $x_{2}$
-\end_inset
-
-
-\series default
-, which is the same as (
-\begin_inset Formula $x_{1}$
-\end_inset
-
- and not
-\begin_inset Formula $x_{2}$
-\end_inset
-
-) or (not
-\begin_inset Formula $x_{1}$
-\end_inset
-
- and
-\begin_inset Formula $x_{2}$
-\end_inset
-
-).
-\end_layout
-
-\begin_layout Description
-logical_not (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "logical\\_not"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The output,
-\begin_inset Formula $y$
-\end_inset
-
- is the truth value of
-\series bold
-not
-\series default
-
-\begin_inset Formula $x$
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Warning
-The Bitwise operators (& and |) are the proper way to combine element-by-element
- array comparisons.
- Be sure to understand the operator precedence: (a>2) & (a<5) is the proper
- syntax because a>2 & a<5 will result in an error due to the fact that 2
- & a is evaluated first.
-\end_layout
-
-\begin_layout Description
-maximum (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "maximum"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The output,
-\begin_inset Formula $y$
-\end_inset
-
-, is the larger of
-\begin_inset Formula $x_{1}$
-\end_inset
-
- and
-\begin_inset Formula $x_{2}$
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout MyCode
->>> maximum([1,0,5,10],[3,2,4,5])
-\newline
-array([ 3, 2, 5, 10])
-\newline
->>> max([1,0,5,10],[3,2,
-4,5])
-\newline
-[3, 2, 4, 5]
-\end_layout
-
-\begin_layout Tip
-The Python function max() will find the maximum over a one-dimensional array,
- but it will do so using a slower sequence interface.
- The reduce method of the maximum ufunc is much faster.
- Also, the max() method will not give answers you might expect for arrays
- with greater than one dimension.
- The reduce method of minimum also allows you to compute a total minimum
- over an array.
-\end_layout
-
-\begin_layout Description
-minimum (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "minimum"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The output,
-\begin_inset Formula $y$
-\end_inset
-
-, is the smaller of
-\begin_inset Formula $x_{1}$
-\end_inset
-
- and
-\begin_inset Formula $x_{2}$
-\end_inset
-
-.
-\end_layout
-
-\begin_layout MyCode
->>> minimum([1,0,5,10],[3,2,4,5])
-\newline
-array([1, 0, 4, 5])
-\newline
->>> min([1,0,5,10],[3,2,4,5]
-)
-\newline
-[1, 0, 5, 10]
-\end_layout
-
-\begin_layout Warning
-the behavior of maximum(a,b) is than that of max(a,b).
- As a ufunc, maximum(a,b) performs an element-by-element comparison of a
- and b and chooses each element of the result according to which element
- in the two arrays is larger.
- In contrast, max(a,b) treats the objects a and b as a whole, looks at the
- (total) truth value of a>b and uses it to return either a or b (as a whole).
- A similar difference exists between minimum(a,b) and min(a,b).
-
-\end_layout
-
-\begin_layout Subsection
-Floating functions
-\end_layout
-
-\begin_layout Standard
-Recall that all of these functions work element-by-element over an array,
- returning an array output.
- The description details only a single operation.
-\end_layout
-
-\begin_layout Description
-isreal (
-\begin_inset Formula $x$
-\end_inset
-
-)
-\begin_inset LatexCommand index
-name "isreal"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- True if
-\begin_inset Formula $x$
-\end_inset
-
- has an imaginary part that is 0.
-\end_layout
-
-\begin_layout Description
-iscomplex (
-\begin_inset Formula $x$
-\end_inset
-
-)
-\begin_inset LatexCommand index
-name "iscomplex"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- True if
-\begin_inset Formula $x$
-\end_inset
-
- has an imaginary part that is non-zero.
-
-\end_layout
-
-\begin_layout Description
-isfinite (
-\begin_inset Formula $x$
-\end_inset
-
-)
-\begin_inset LatexCommand index
-name "isfinite"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- True if
-\begin_inset Formula $x$
-\end_inset
-
- is a finite floating point number (not a NaN or an Inf).
-
-\end_layout
-
-\begin_layout Description
-isinf (
-\begin_inset Formula $x$
-\end_inset
-
-)
-\begin_inset LatexCommand index
-name "isinf"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- True if
-\begin_inset Formula $x$
-\end_inset
-
- is
-\begin_inset Formula $\pm\infty$
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Description
-isnan (
-\begin_inset Formula $x$
-\end_inset
-
-)
-\begin_inset LatexCommand index
-name "isnan"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- True if
-\begin_inset Formula $x$
-\end_inset
-
- is Not-a-Number.
- This represents invalid results.
- When a NaN is created, the invalid flag is set.
- If you set the error mode of invalid to 'warn', 'raise', or 'call', then
- the appropriate action will be performed on NaN creation.
-
-\end_layout
-
-\begin_layout Description
-signbit (
-\begin_inset Formula $x$
-\end_inset
-
-)
-\begin_inset LatexCommand index
-name "signbit"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- True where the sign bit of the floating point number is set.
- This should correspond to
-\begin_inset Formula $x>0$
-\end_inset
-
- when
-\begin_inset Formula $x$
-\end_inset
-
- is a finite number.
- When,
-\begin_inset Formula $x$
-\end_inset
-
- is NaN or infinite, then this tests the actual signbit.
-
-\end_layout
-
-\begin_layout Description
-modf (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y_{1}$
-\end_inset
-
-,
-\begin_inset Formula $y_{2}$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "modf"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Breaks up the floating point value
-\begin_inset Formula $x$
-\end_inset
-
- into its fractional,
-\begin_inset Formula $y_{1}$
-\end_inset
-
-, and integral,
-\begin_inset Formula $y_{2}$
-\end_inset
-
-, parts.
- Thus,
-\begin_inset Formula $x=y_{1}+y_{2}$
-\end_inset
-
- with
-\family typewriter
-floor(y2)==y2
-\family default
-.
-
-\end_layout
-
-\begin_layout Description
-ldexp (
-\begin_inset Formula $x$
-\end_inset
-
-,
-\begin_inset Formula $n$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "ldexp"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Fast multiply of a floating point number by an integral power of 2:
-\begin_inset Formula $y=2^{n}x.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-frexp (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-,
-\begin_inset Formula $n$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "frexp"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Breaks up the floating point value
-\begin_inset Formula $x$
-\end_inset
-
- into a normalized fraction,
-\begin_inset Formula $y$
-\end_inset
-
- and an exponent,
-\begin_inset Formula $n$
-\end_inset
-
- which corresponds to how the value is represented in the computer.
- The results are such that
-\begin_inset Formula $x=y2^{n}.$
-\end_inset
-
- Effectively, the inverse of ldexp.
-
-\end_layout
-
-\begin_layout Description
-fmod (
-\begin_inset Formula $x_{1}$
-\end_inset
-
-,
-\begin_inset Formula $x_{2}$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
-])
-\begin_inset LatexCommand index
-name "fmod"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Computes the remainder of dividing
-\begin_inset Formula $x_{1}$
-\end_inset
-
- by
-\begin_inset Formula $x_{2}$
-\end_inset
-
-.
- The result,
-\begin_inset Formula $y$
-\end_inset
-
-, is
-\begin_inset Formula $x_{1}-nx_{2}$
-\end_inset
-
- where
-\begin_inset Formula $n$
-\end_inset
-
- is the quotient (rounded towards zero to an integer) of
-\begin_inset Formula $x_{1}/x_{2}.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-floor (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
- ])
-\begin_inset LatexCommand index
-name "floor"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return
-\begin_inset Formula $y=\left\lfloor x\right\rfloor $
-\end_inset
-
- where
-\begin_inset Formula $y$
-\end_inset
-
- is the nearest integer smaller-than or equal to
-\begin_inset Formula $x.$
-\end_inset
-
- Thus,
-\begin_inset Formula $ $
-\end_inset
-
-
-\begin_inset Formula $\left\lfloor x\right\rfloor \leq x<\left\lfloor x\right\rfloor +1$
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Description
-ceil (
-\begin_inset Formula $x$
-\end_inset
-
- [,
-\begin_inset Formula $y$
-\end_inset
-
- ])
-\begin_inset LatexCommand index
-name "ceil"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return
-\begin_inset Formula $y=\left\lceil x\right\rceil $
-\end_inset
-
- where
-\begin_inset Formula $y$
-\end_inset
-
- is the nearest integer greater-than or equal to
-\begin_inset Formula $x$
-\end_inset
-
-.
- Thus,
-\begin_inset Formula $x\leq\left\lceil x\right\rceil <x+1.$
-\end_inset
-
-
-\begin_inset LatexCommand index
-name "ufunc|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Chapter
-Basic Modules
-\end_layout
-
-\begin_layout Quotation
-It is the mark of an educated mind to rest satisfied with the degree of
- precision which the nature of the subject admits and not to seek exactness
- where only an approximation is possible.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Aristotle
-\end_layout
-
-\begin_layout Quotation
-"Oh no.
- We're in the hands of engineers!"
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Malcolm, Ian in 'Jurassic Park'
-\end_layout
-
-\begin_layout Standard
-The NumPy distribution contains some basic functionality equivalent to what
- was available in the Numeric packages previously.
- This section documents the new interfaces.
- These are sub-packages of the NumPy namespace.
- The linalg and fft capabilities are useful but limited.
- You should install the full SciPy package to access more functionality.
- The numpy.dual module contains functions that are defined in both SciPy
- and NumPy.
- If SciPy defines func, then numpy.dual.func will point to the SciPy version,
- otherwise it will point to the NumPy version.
- It must be imported specifically to be used.
- Table
-\begin_inset LatexCommand ref
-reference "cap:Functions-in-numpy.dual"
-
-\end_inset
-
- shows the functions defined in numpy.dual that are in both NumPy and SciPy.
-\end_layout
-
-\begin_layout Standard
-\begin_inset Float table
-wide false
-sideways false
-status open
-
-\begin_layout Standard
-\begin_inset Caption
-
-\begin_layout Standard
-\begin_inset LatexCommand label
-name "cap:Functions-in-numpy.dual"
-
-\end_inset
-
-Functions in numpy.dual (both in NumPy and SciPy)
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\align center
-\begin_inset Tabular
-<lyxtabular version="3" rows="4" columns="2">
-<features>
-<column alignment="center" valignment="top" leftline="true" width="0">
-<column alignment="center" valignment="middle" leftline="true" rightline="true" width="55text%">
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Family
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Functions
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Fourier Transforms
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-fft, ifft, fft2, ifft2, fftn, ifftn
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Linear Algebra
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-norm, det, inv, pinv, solve, eig, eigh, eigvals, eigvalsh, lstsq, cholesky,
- svd
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row topline="true" bottomline="true">
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-Special Functions
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Standard
-i0
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Linear Algebra (
-\family typewriter
-linalg
-\family default
-)
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "linalg|("
-
-\end_inset
-
-These functions are in the numpy.linalg sub-package.
-\end_layout
-
-\begin_layout Description
-inv (A)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the (matrix) inverse of the 2-d array A.
- The result, X, is such that dot(A,X) is equal to eye(*A.shape) (to within
- machine precision).
-
-\end_layout
-
-\begin_layout Description
-solve (A,b)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Find the solution to the linear equation
-\begin_inset Formula $\mathbf{Ax}=\mathbf{b}$
-\end_inset
-
-, where
-\begin_inset Formula $A$
-\end_inset
-
- is a 2-d array and
-\begin_inset Formula $b$
-\end_inset
-
- is a 1-d or 2-d array.
-
-\end_layout
-
-\begin_layout Description
-tensorsolve (A, b, axes=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Find the solution,
-\begin_inset Formula $x_{kl}$
-\end_inset
-
-, to the multi-index linear equation
-\begin_inset Formula \[
-\sum_{kl}A_{ijkl}x_{kl}=b_{ij}.\]
-
-\end_inset
-
- The axes argument specifies which dimensions of
-\begin_inset Formula $A$
-\end_inset
-
- are summed over.
- If it is None, then the last A.ndim - b.ndim dimensions are summed over.
- The result, therefore, has dimension x.ndim = A.ndim-b.ndim.
-
-\end_layout
-
-\begin_layout Description
-tensorinv (A, ind=2)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Find the tensor inverse of
-\begin_inset Formula $A$
-\end_inset
-
-, defined to be the tensor such that tensordot (Ainv, A) is an identity
- operator.
-
-\end_layout
-
-\begin_layout Description
-cholesky (A)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return,
-\begin_inset Formula $\mathbf{L}$
-\end_inset
-
-, the Cholesky decomposition of
-\begin_inset Formula $\mathbf{A}$
-\end_inset
-
-.
- Cholesky decomposition is applicable to a Hermitian, positive definite
- matrices.
- When
-\begin_inset Formula $\mathbf{A}=\mathbf{A}^{H}$
-\end_inset
-
- and
-\begin_inset Formula $\mathbf{x}^{H}\mathbf{Ax}\geq0$
-\end_inset
-
- for all
-\begin_inset Formula $\mathbf{x}$
-\end_inset
-
-, then decompositions of
-\begin_inset Formula $\mathbf{A}$
-\end_inset
-
- can be found so that
-\begin_inset Formula $\mathbf{A}=\mathbf{LL}^{H}$
-\end_inset
-
-, where
-\begin_inset Formula $\mathbf{L}$
-\end_inset
-
- is lower-triangular.
-
-\end_layout
-
-\begin_layout Description
-eigvals (A)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return all solutions (
-\begin_inset Formula $\lambda$
-\end_inset
-
-) to the equation
-\begin_inset Formula $\mathbf{Ax}=\lambda\mathbf{x}$
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Description
-eig (A)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return all solutions
-\begin_inset Formula $\left(\lambda,\mathbf{x}\right)$
-\end_inset
-
- to the equation
-\begin_inset Formula $\mathbf{Ax}=\lambda\mathbf{x}$
-\end_inset
-
-.
- The first element of the return tuple contains all the eigenvalues.
- The second element of the return tuple contains the eigenvectors in the
- columns (x[:,i] is the ith eigenvector).
-\end_layout
-
-\begin_layout Description
-eigvalsh (U)
-\end_layout
-
-\begin_layout Description
-eigh (U)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- These functions are identical to eigvals and eig except they only work
- with Hermitian matrices where
-\begin_inset Formula $\mathbf{U}^{H}=\mathbf{U}$
-\end_inset
-
- (only the lower-triangular part of the array is used).
-\end_layout
-
-\begin_layout Description
-svd (A)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Compute the singular value decomposition of the 2-d array
-\begin_inset Formula $\mathbf{A}$
-\end_inset
-
-.
- Every
-\begin_inset Formula $m\times n$
-\end_inset
-
- matrix can be decomposed into a pair of unitary matrices,
-\begin_inset Formula $\mathbf{U}=\mathbf{U}^{H}$
-\end_inset
-
- (
-\begin_inset Formula $m\times m$
-\end_inset
-
-) and
-\begin_inset Formula $\mathbf{V}=\mathbf{V}^{H}$
-\end_inset
-
- (
-\begin_inset Formula $n\times n$
-\end_inset
-
-) and an
-\begin_inset Formula $m\times n$
-\end_inset
-
-
-\begin_inset Quotes eld
-\end_inset
-
-diagonal
-\begin_inset Quotes erd
-\end_inset
-
- matrix
-\begin_inset Formula $\boldsymbol{\Sigma}$
-\end_inset
-
-, such that
-\begin_inset Formula $\mathbf{A}=\mathbf{U\boldsymbol{\Sigma}}\mathbf{V}^{H}$
-\end_inset
-
-.
- The only non-zero portion of
-\begin_inset Formula $\boldsymbol{\Sigma}$
-\end_inset
-
- is the upper
-\begin_inset Formula $r\times r$
-\end_inset
-
- block where
-\begin_inset Formula $r=\min\left(m,n\right)$
-\end_inset
-
-.
- The svd function returns three arrays as a tuple: (
-\begin_inset Formula $\mathbf{U}$
-\end_inset
-
-,
-\begin_inset Formula $\boldsymbol{\sigma}$
-\end_inset
-
-,
-\begin_inset Formula $\mathbf{V}^{H}$
-\end_inset
-
-).
- The singular values are returned in the 1-d array
-\begin_inset Formula $\boldsymbol{\sigma}$
-\end_inset
-
-.
- If needed, the array
-\begin_inset Formula $\boldsymbol{\Sigma}$
-\end_inset
-
- can be found (if really needed) using the command diag(
-\begin_inset Formula $\boldsymbol{\sigma}$
-\end_inset
-
-) which creates the
-\begin_inset Formula $r\times r$
-\end_inset
-
- diagonal block and then inserting this into a zeros matrix:
-\end_layout
-
-\begin_layout MyCode
->>> A = random.rand(3,5)
-\newline
->>> from numpy.dual import svd; U,s,Vh = svd(A)
-\newline
->>>
- r=min(*A.shape); Sig = zeros_like(A);
-\newline
->>> Sig[:r,:r] = diag(s); print Sig
-\newline
-[[
- 2.1634 0.
- 0.
- 0.
- 0.
- ]
-\newline
- [ 0.
- 0.7076 0.
- 0.
- 0.
- ]
-\newline
- [ 0.
- 0.
- 0.2098 0.
- 0.
- ]]
-\end_layout
-
-\begin_layout Description
-pinv (A, rcond=
-\begin_inset Formula $10^{-10}$
-\end_inset
-
-)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the generalized, pseudo inverse, of
-\begin_inset Formula $A$
-\end_inset
-
-.
- For invertible matrices, this is the same as the inverse.
-
-\end_layout
-
-\begin_layout Description
-det (A)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the determinant of the array.
- The determinant of an array is the product of its singular values.
-
-\end_layout
-
-\begin_layout Description
-lstsq (A, b, rcond=
-\begin_inset Formula $10^{-10}$
-\end_inset
-
-)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return (x, resids, rank, s) where x minimizes resids=
-\begin_inset Formula $\left\Vert \mathbf{Ax}-\mathbf{b}\right\Vert _{2}$
-\end_inset
-
-.
- The output rank is the rank of A and s is the singular values of a in descendin
-g order.
- Singular values less than s[0]*rcond are treated as 0.
- If the rank of A is less than the number of columns of A or greater than
- the number of rows, resids will be returned as an empty array.
-\begin_inset LatexCommand index
-name "linalg|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Discrete Fourier Transforms (
-\family typewriter
-fft
-\family default
-)
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "fft|("
-
-\end_inset
-
-All of the algorithms here are most efficient if the length of the data
- is a power of 2 (or decomposable into low prime factors).
-
-\end_layout
-
-\begin_layout Description
-fft (x, n=None, axis=-1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return, X, the N-point Discrete Fourier Transform (DFT) of x along the
- given axis using a fast algorithm.
- If N is larger than x.shape[axis], then x will be zero-padded.
- If N is smaller than x.shape[axis], then the first N items will be used.
- The result is computed for
-\begin_inset Formula $k=0\ldots n-1$
-\end_inset
-
- from the formula:
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-X\left[k\right]=\sum_{m=0}^{n-1}x[m]\exp\left(-j\frac{2\pi km}{n}\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Tip
-The fft returns values for
-\begin_inset Formula $k=0\ldots N-1$
-\end_inset
-
-.
- Because
-\begin_inset Formula $X\left[N-k\right]=X[-k]$
-\end_inset
-
- in the FFT formula, larger values of k correspond also to negative frequencies.
-\end_layout
-
-\begin_layout Description
-ifft (X, n=None, axis=-1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the inverse of the fft so that (ifft(fft(a)) == a within numerical
- precision.
- The order of frequencies must be the same as returned by fft.
- The result is computed (using a fast algorithm) for
-\begin_inset Formula $m=0\ldots n-1$
-\end_inset
-
- from the formula:
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-x\left[m\right]=\frac{1}{n}\sum_{k=0}^{n-1}X\left[k\right]\exp\left(j\frac{2\pi km}{n}\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-Sometimes having the
-\begin_inset Quotes eld
-\end_inset
-
-negative
-\begin_inset Quotes erd
-\end_inset
-
- frequencies at the end of the output returned by fft can be a little confusing.
- There are two ways to deal with this confusion.
- In my opinion, the most useful way is to get a collection of DFT sample
- frequencies and use them to keep track of where each frequency is.
- The function
-\family typewriter
-fftfreq
-\family default
- provides these sample frequencies.
- Making an x-y plot, where the sample frequencies are along the
-\begin_inset Quotes eld
-\end_inset
-
-x
-\begin_inset Quotes erd
-\end_inset
-
--axis and the result of the DFT is along the
-\begin_inset Quotes eld
-\end_inset
-
-y
-\begin_inset Quotes erd
-\end_inset
-
--axis provides a useful visualization with the zero-frequency at the center
- of the plot.
- The advantage of this approach is that your data is still in proper order
- for using the
-\family typewriter
-ifft
-\family default
- function.
- Some people, however, prefer to simply swap one-half of the output with
- the other.
- This is exactly what the function
-\family typewriter
-fftshift
-\family default
- does.
- Of course, now the data is not in the proper order for the ifft function,
- but to each his own.
-
-\end_layout
-
-\begin_layout Standard
-The reason that the
-\begin_inset Quotes eld
-\end_inset
-
-negative
-\begin_inset Quotes erd
-\end_inset
-
- frequencies are in the upper part of the return signal was given in the
- description of the DFT.
- The reason is that the output of the DFT is just one period of a periodic
- function (with period
-\begin_inset Formula $n$
-\end_inset
-
-).
- The traditional output of the FFT algorithm is to provide the portion of
- the function from from
-\begin_inset Formula $k=0$
-\end_inset
-
- to
-\begin_inset Formula $k=n-1$
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Description
-fftshift (x, axes=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Shift zero-frequency component to the center of the spectrum.
- This function swaps half-spaces for all axes listed (defaults to all of
- them).
-
-\end_layout
-
-\begin_layout Description
-ifftshift (x, axes=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Reverse the effect of the fftshift operation.
- Thus, it takes zero-centered data and shifts it into the correct order
- for the ifft operation.
-\end_layout
-
-\begin_layout Description
-fftfreq (n, d=1.0)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Provide the DFT sample frequencies.
- The returned float array contains the frequency bins in the order returned
- from the fft function.
- If given,
-\begin_inset Formula $d$
-\end_inset
-
- represents the sample-spacing.
- The units on the frequency bins are cycles / unit.
- For example, the following example computes the output frequencies (in
- Hz) of the fft of
-\begin_inset Formula $256$
-\end_inset
-
- samples of a voice signal sampled at 20000Hz.
-\end_layout
-
-\begin_layout MyCode
->>> from numpy.fft import fftfreq; f=fftfreq(256,d=1./20e3)
-\newline
->>> print f[0],
- f[1], f[2], f[128]
-\newline
-0.0 78.125 156.25 -10000.0
-\end_layout
-
-\begin_layout Description
-fft2 (x, s=None, axes=(-2,-1))
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the two-dimensional fft of the array x for each 2-d array formed
- by axes.
- The 2-d fft is computed as
-\begin_inset Formula \[
-X\left[k_{0},k_{1}\right]=\sum_{m_{0}=0}^{s[0]-1}\sum_{m_{1}=0}^{s[1]-1}x\left[m_{0},m_{1}\right]\exp\left(-j\frac{2\pi k_{0}m_{0}}{s[0]}\right)\exp\left[-j\frac{2\pi k_{1}m_{1}}{s\left[1\right]}\right]\]
-
-\end_inset
-
- and can be realized by repeated application of the 1-d fft (first over
- the axes[0] and then over axes[1]).
- In other-words fft2(x,s,axes) is equivalent to fft(fft(x, s[0], axes[0]),
- s[1], axes[1]).
- The 2-d fft is returned for
-\begin_inset Formula $k_{0}=0\ldots s[0]-1$
-\end_inset
-
- and
-\begin_inset Formula $k_{1}=0\ldots s[1]-1.$
-\end_inset
-
- Symmetry (
-\begin_inset Formula $X\left[s[0]-k_{0},s[1]-k_{1}\right]=X[-k_{0},-k_{1}]$
-\end_inset
-
-) ensures that higher values of
-\begin_inset Formula $k_{i}$
-\end_inset
-
- correspond to negative frequencies.
-
-\end_layout
-
-\begin_layout Description
-ifft2 (X, s=None, axes=(-2,-1))
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the inverse of the two-dimension fft.
- Thus, ifft2(fft2(x)) == x to within numerical precision.
- Note that the
-\begin_inset Quotes eld
-\end_inset
-
-negative frequencies
-\begin_inset Quotes erd
-\end_inset
-
- must be
-\end_layout
-
-\begin_layout Description
-fftn (x, s=None, axes=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the
-\begin_inset Formula $N$
-\end_inset
-
--dimensional fft of x.
- If s is not given, then if axes is given, then
-\begin_inset Formula $N$
-\end_inset
-
-=len(axes), otherwise
-\begin_inset Formula $N$
-\end_inset
-
-=x.ndim.
- If s is given, then
-\begin_inset Formula $N$
-\end_inset
-
-=len(s).
- Results are computed using a similar formula as for the 1- and 2-d FFT
- with
-\begin_inset Formula $N$
-\end_inset
-
- summations.
-
-\end_layout
-
-\begin_layout Description
-ifftn (X, s=None, axes=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the
-\begin_inset Formula $N$
-\end_inset
-
--dimensional inverse fft of
-\begin_inset Formula $X$
-\end_inset
-
-.
- Note that ifftn(fftn(x)) == x to within machine precision.
-
-\end_layout
-
-\begin_layout Standard
-The Discrete Fourier transform returns complex-valued data (even for real-valued
- input).
- If the data was originally real-valued, then much of the output of the
- full DFT is redundant.
- Notice that if
-\begin_inset Formula $x\left[m\right]$
-\end_inset
-
- is real, then
-\begin_inset Formula \begin{eqnarray*}
-X\left[n-k\right] & = & \sum_{m=0}^{n-1}x[m]\exp\left(-j\frac{2\pi\left(n-k\right)m}{n}\right)\\
- & = & \left[\sum_{m=0}^{n-1}x\left[m\right]\exp\left(-j\frac{2\pi km}{n}\right)\right]^{*}\\
- & = & X^{*}\left[k\right],\end{eqnarray*}
-
-\end_inset
-
-where
-\begin_inset Formula $a^{*}$
-\end_inset
-
- denotes the complex-conjugate of
-\begin_inset Formula $a$
-\end_inset
-
-.
- So, the upper half of the fft output (the negative frequencies) is determined
- exactly by the lower half of the output when the input is purely real.
- This kind of symmetry is called Hermitian symmetry.
- The real-valued Fourier transforms described next take advantage of Hermitian
- symmetry to compute only the unique outputs more quickly.
-
-\end_layout
-
-\begin_layout Standard
-The symmetry in higher dimensions is always about the origin.
- If
-\begin_inset Formula $N$
-\end_inset
-
- is the number of dimensions, then:
-\begin_inset Formula \[
-X[n_{1}-k_{1},n_{2}-k_{2},\ldots n_{N}-k_{N}]=X^{*}\left[k_{1},k_{2},\ldots,k_{N}\right].\]
-
-\end_inset
-
-Thus, the data-savings remains constant at about 1/2 for higher dimensions
- as well.
-
-\end_layout
-
-\begin_layout Description
-rfft (x, n=None, axis=-1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Compute the first n//2+1 points of the
-\begin_inset Formula $n$
-\end_inset
-
--point discrete Fourier transform of the real valued data along the given
- axis.
- The returned array will be just the first half of the
-\family typewriter
-fft
-\family default
-, corresponding to positive frequencies: rfft(x) == fft(x)[:n//2+1]
-\end_layout
-
-\begin_layout Description
-irfft (X, n=None, axis=-1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Compute the inverse
-\begin_inset Formula $n$
-\end_inset
-
--point discrete Fourier transform along the given axis using the first n//2+1
- points.
- To within numerical precision, irfft(rfft(x))==x.
-
-\end_layout
-
-\begin_layout Description
-rfft2 (x, s=None, axes=(-2, -1))
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Compute only the first half-plane of the two-dimensional discrete Fourier
- transform corresponding to unique values.
- s[0] and
-\begin_inset Formula $s[1]$
-\end_inset
-
--point DFTs will be computed along axes[0] and axes[1] dimensions, respectively.
- Requires a real array.
- If
-\begin_inset Formula $s$
-\end_inset
-
- is None it defaults to the shape of
-\begin_inset Formula $x.$
-\end_inset
-
- The real fft will be computed along the last axis specified in axes while
- a full fft will be computed in the other dimension.
-\end_layout
-
-\begin_layout Description
-irfft2 (X, s=None, axes=(-2, -1))
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Compute the inverse of the 2-d DFT using only the first quadrant.
- Returns a real array such that to within numerical precision irfft2(rfft2(x))==
-x.
-\end_layout
-
-\begin_layout Description
-rfftn (x, s=None, axes=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Compute only the unique part of the
-\begin_inset Formula $N$
-\end_inset
-
--dimensional DFT from a real-valued array.
- If
-\begin_inset Formula $s$
-\end_inset
-
- is None it defaults to the shape of x.
- If axes is not given it defaults to all the axes (-n,
-\begin_inset Formula $\ldots$
-\end_inset
-
-, -1).
- The length of axes provides the dimensionality of the DFT.
- The unique part of the real
-\begin_inset Formula $N$
-\end_inset
-
--dimensional DFT is obtained by slicing the full fft along the last axis
- specified and taking n//2+1 slices.
- rfftn(x) == fft(x)[sliceobj] where sliceobj[axes[-1]] = slice(None,s[-1]//2+1,N
-one).
-\end_layout
-
-\begin_layout Description
-irfftn (X, s=None, axes=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Compute the inverse DFT from the unique portions of the N-dimensional DFT
- provided by
-\family typewriter
-rfftn
-\family default
-.
-\end_layout
-
-\begin_layout Standard
-Occasionally, the situation may arise where you have complex-valued data
- with Hermitian symmetry (or real-valued symmetric data).
- This ensures that the Fourier transform will be real.
- The two functions below can calculate it without wasting extra space for
- the zero-valued imaginary entries of the Discrete Fourier transform, or
- the entire signal.
-\end_layout
-
-\begin_layout Description
-hfft (x, n=None, axis=-1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Calculate the
-\begin_inset Formula $n$
-\end_inset
-
--point real-valued Fourier transform from (the first half of Hermitian-symmetric
- data, x.
-
-\end_layout
-
-\begin_layout Description
-ihfft (X, n=None, axis=-1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return (the first half-of) Hermitian-symmetric data from the real-valued
- Fourier transform, X.
-\begin_inset LatexCommand index
-name "fft|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Random Numbers (
-\family typewriter
-random
-\family default
-)
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "random|("
-
-\end_inset
-
-The random number capabilities surpass those that were available in Numeric.
- The random number facilities were generously contributed by Robert Kern,
- who has been a dedicated and patient help to many mailing list questioners.
- Robert built the random package using Pyrex to build on top of his own
- code as well as that of randomkit by Jean-Sebastien Roy as well as code
- by Ivan Frohne.
- The fundamental random number generator is the Mersenne Twister based on
- code written by Makoto Matsumoto and Takuji Nishimura (and modified for
- Python by Raymond Hettinger).
- Random numbers from discrete and continuous distributions are available,
- as well as some useful random-number-related utilities.
- Many of the random number generators are based on algorithms published
- by Luc Devroye in
-\begin_inset Quotes eld
-\end_inset
-
-Non-Uniform Random Variate Generation
-\begin_inset Quotes erd
-\end_inset
-
- available electronically at
-\begin_inset LatexCommand htmlurl
-target "http://cgm.cs.mcgill.ca/~luc/rnbookindex.html"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-Each of the discrete and continuous random number generators take a size
- keyword.
- If this is None (default), then the size is determined from the additional
- inputs (using ufunc-like broadcasting).
- If no additional inputs are needed, or if these additional inputs are scalars,
- then a single number is generated from the selected distribution.
- If size is an integer, then a 1-d array of that size is generated filled
- with random numbers from the selected distribution.
- Finally, if size is a tuple, then an array of that shape is returned filled
- with random numbers.
-
-\end_layout
-
-\begin_layout Standard
-Many distributions take additional inputs as parameters.
- These additional inputs must be broadcastable to each other (and to the
- size parameter if it is not None).
- The broadcasting behavior of the additional inputs is ufunc-like.
-
-\end_layout
-
-\begin_layout Subsection
-Discrete Distributions
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "random!discrete|("
-
-\end_inset
-
-Discrete random numbers take on only a countable number of values (typically
- integers).
- Each distribution has associated with it a probability mass function (pmf),
-
-\begin_inset Formula $p_{m}\left(k;\cdot\right),$
-\end_inset
-
- that is defined as the probability that the returned random number is
-\begin_inset Formula $k$
-\end_inset
-
-.
- The arguments after
-\begin_inset Formula $k$
-\end_inset
-
- represent possible parameters to the distribution.
- Thus, let
-\begin_inset Formula $X\left(\cdot\right)$
-\end_inset
-
- represent the random number generator for a particular distribution.
- Then,
-\begin_inset Formula \[
-p_{m}\left(k;\cdot\right)=\textrm{Probability}\left\{ X\left(\cdot\right)=k\right\} .\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-It will be useful to define the discrete indicator function,
-\begin_inset Formula $I_{S}\left(k\right),$
-\end_inset
-
- where
-\begin_inset Formula $S$
-\end_inset
-
- is a set of integers (often represented by an interval).
-
-\begin_inset Formula $I_{S}\left(k\right)=1$
-\end_inset
-
- if
-\begin_inset Formula $k\in S$
-\end_inset
-
-, otherwise
-\begin_inset Formula $I_{S}\left(k\right)=0.$
-\end_inset
-
- This convenient notation isolates the relevance of a particular functional
- form to a certain range.
- Also, the formulas below make use of the following definition:
-\begin_inset Formula \[
-\left(\begin{array}{c}
-n\\
-k\end{array}\right)=\frac{n!}{k!\left(n-k\right)!}\]
-
-\end_inset
-
- where
-\begin_inset Formula $k!=k\cdot\left(k-1\right)\cdot\cdots\cdot2\cdot1.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-binomial (n, p, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This random number models the number of successes in
-\begin_inset Formula $n$
-\end_inset
-
- independent trials of a random experiment where the probability of success
- in each experiment is
-\begin_inset Formula $p$
-\end_inset
-
-.
-
-\begin_inset Formula \[
-p_{m}\left(k\right)=\left(\begin{array}{c}
-n\\
-k\end{array}\right)p^{k}\left(1-p\right)^{n-k}I_{\left[0,n\right]}\left(k\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-geometric (p, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This random number models the number of (independent) attempts required
- to obtain a success where the probability of success on each attempt is
-
-\begin_inset Formula $p$
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-p_{m}\left(k;p\right)=\left(1-p\right)^{k-1}p\, I_{\left[1,\infty\right)}\left(k\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-hypergeometric (ngood, nbad, nsample, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Imagine a probability theorists favorite urn filled with
-\begin_inset Formula $n_{g}$
-\end_inset
-
-
-\begin_inset Quotes eld
-\end_inset
-
-good
-\begin_inset Quotes erd
-\end_inset
-
- objects and
-\begin_inset Formula $n_{b}$
-\end_inset
-
-
-\begin_inset Quotes eld
-\end_inset
-
-bad
-\begin_inset Quotes erd
-\end_inset
-
- objects.
- In other words there are two types of objects in a jar.
- The hypergeometric random number models how many
-\begin_inset Quotes eld
-\end_inset
-
-good
-\begin_inset Quotes erd
-\end_inset
-
- objects will be present when
-\begin_inset Formula $N$
-\end_inset
-
- items are taken out of the urn without replacement.
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-p\left(k;n_{g},n_{b},N\right)=\frac{\left(\begin{array}{c}
-n_{g}\\
-k\end{array}\right)\left(\begin{array}{c}
-n_{b}\\
-N-k\end{array}\right)}{\left(\begin{array}{c}
-n_{g}+n_{b}\\
-N\end{array}\right)}I_{\left[N-n_{b},\textrm{min}\left(n,N\right)\right]}\left(k\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-logseries (p, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A random number whose pmf with terms proportional to the Taylor series
- expansion of
-\begin_inset Formula $\log\left(1-p\right)$
-\end_inset
-
-.
- It has been used in biological studies to model the species abundance distribut
-ion.
-
-\begin_inset Formula \[
-p_{m}\left(k;p\right)=-\frac{p^{k}}{k\log\left(1-p\right)}\, I_{\left[1,\infty\right)}\left(k\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-multinomial (n, pvals, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This generator produces random vectors of length
-\begin_inset Formula $N$
-\end_inset
-
- where
-\begin_inset Formula $N=\textrm{len}\left(pvals\right)$
-\end_inset
-
-.
- The shape of the returned array is always the shape indicated by size +
- (
-\begin_inset Formula $N,$
-\end_inset
-
-).
- The multinomial distribution is a generalization of the binomial distribution.
- This time,
-\begin_inset Formula $n$
-\end_inset
-
- trials of an experiment are independently repeated but each trial results
- in
-\begin_inset Formula $N$
-\end_inset
-
- possible integers
-\begin_inset Formula $k_{1},k_{2},\ldots,k_{N}$
-\end_inset
-
- with
-\begin_inset Formula $\sum_{i=1}^{N}k_{i}=n.$
-\end_inset
-
-
-\begin_inset Formula \begin{eqnarray*}
-p_{m}\left(k_{1},k_{2},\ldots,k_{N};\cdot\right) & = & \textrm{Probability}\left\{ X\left(\cdot\right)=\left[k_{1},k_{2},\cdots,k_{N}\right]\right\} \\
- & = & \frac{n!}{k_{1}!k_{2}!\cdots k_{N}!}p_{1}^{k_{1}}p_{2}^{k_{2}}\cdots p_{N}^{k_{N}}\end{eqnarray*}
-
-\end_inset
-
-where
-\begin_inset Formula $pvals=[p_{1},p_{2},\ldots,p_{N}].$
-\end_inset
-
- It must be true that
-\begin_inset Formula $\sum_{i=1}^{N}p_{i}=1.$
-\end_inset
-
- Therefore, as long as
-\begin_inset Formula $\sum_{i=1}^{N-1}p_{i}\leq1,$
-\end_inset
-
- the last entry in
-\begin_inset Formula $pvals$
-\end_inset
-
- is computed as
-\begin_inset Formula $1-\sum_{i=1}^{N-1}p_{i}$
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Description
-negative_binomial (n, p, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Models the number of extra independent trials (beyond
-\begin_inset Formula $n$
-\end_inset
-
-) required to accumulate a total of
-\begin_inset Formula $n$
-\end_inset
-
- successes where the probability of success on each trial is
-\begin_inset Formula $p.$
-\end_inset
-
- Equivalently, this random number models the number of failures encountered
- while accumulating
-\begin_inset Formula $n$
-\end_inset
-
- successes during independent trials of the experiment that succeeds with
- probability,
-\begin_inset Formula $p$
-\end_inset
-
-.
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-p_{m}\left(k;n,p\right)=\left(\begin{array}{c}
-k+n-1\\
-n-1\end{array}\right)p^{n}\left(1-p\right)^{k}\, I_{\left[0,\infty\right)}\left(k\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-poisson (lam=1.0, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This random number counts the number of successes in
-\begin_inset Formula $n$
-\end_inset
-
- independent experiments (where the probability of success in each experiment
- is
-\begin_inset Formula $p$
-\end_inset
-
-) in the limit as
-\begin_inset Formula $n\rightarrow\infty$
-\end_inset
-
- and
-\begin_inset Formula $p\rightarrow0$
-\end_inset
-
- gets very small such that
-\begin_inset Formula $\lambda=np\geq0$
-\end_inset
-
- is a constant.
- It can be used, for example, to model how many typographical errors are
- on each page of a book.
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-p\left(k;\lambda\right)=e^{-\lambda}\frac{\lambda^{k}}{k!}\, I_{\left[0,\infty\right)}\left(k\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-zipf (a, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The probability mass function of this random number (also called the zeta
- distribution) is
-\begin_inset Formula \[
-p_{m}\left(k;a\right)=\frac{1}{\zeta\left(a\right)k^{a}}\, I_{\left[1,\infty\right)}\left(k\right),\]
-
-\end_inset
-
-where
-\begin_inset Formula \[
-\zeta\left(a\right)=\sum_{n=1}^{\infty}\frac{1}{n^{a}}\]
-
-\end_inset
-
-is the Riemann zeta function.
- Zipf distributions have been shown to characterize use of words in a natural
- language (like English), the popularity of library books, and even the
- use of the web.
- The Zipf distribution describes collections that have a few items whose
- probability of selection is very high, a medium number of items whose probabili
-ty of selection is medium, and a huge number of items whose probability
- of selection is very low.
-\begin_inset LatexCommand index
-name "random!discrete|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-Continuous Distributions
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "random!continuous|("
-
-\end_inset
-
-Continuous random numbers can take on an uncountable number of values.
- Therefore, the value returned by a continuous distribution is denoted
-\begin_inset Formula $x$
-\end_inset
-
-.
- Because there is an uncountable number of possibilities for the random
- number
-\begin_inset Foot
-status open
-
-\begin_layout Standard
-A computer actually always generates a random number from a discrete distributio
-n because there are only a finite set of numbers that can be represented
- by a computer.
- However, for continuous random number generators, the resulting random
- numbers usually approximate the continuous distribution well enough to
- ignore the subtlety.
-\end_layout
-
-\end_inset
-
-, a continuous distribution is modeled by a probability density function,
-
-\begin_inset Formula $f\left(x;\cdot\right).$
-\end_inset
-
- To obtain the probability that the random number generated by
-\begin_inset Formula $X\left(\cdot\right)$
-\end_inset
-
- is in a certain interval, we integrate this density function:
-\begin_inset Formula \[
-\int_{-\infty}^{b}f\left(x\right)dx=\textrm{Probability}\left\{ X\left(\cdot\right)\leq b\right\} .\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-To obtain a probability, we have to integrate
-\begin_inset Formula $f\left(x\right)$
-\end_inset
-
- which is why it is called a density function.
- Most continuous distributions are defined by their probability density
- functions (pdf).
- Some have basic origins, a few are derived from other distributions, and
- some are used mainly for modelling unknown distributions.
-
-\end_layout
-
-\begin_layout Standard
-Some of the parameters of the distributions are labeled as location (
-\emph on
-loc
-\emph default
-) and
-\emph on
-scale
-\emph default
- parameters.
- These parameters are not shown in the equation for the pdf.
- because they affect the distribution in a known way.
- This is due to the fact that if
-\begin_inset Formula $X$
-\end_inset
-
- is a number drawn from a distribution with pdf
-\begin_inset Formula $f_{X}\left(x\right),$
-\end_inset
-
- then
-\begin_inset Formula $Y=Sx+L$
-\end_inset
-
- is a number drawn from a distribution with pdf
-\begin_inset Formula \[
-f_{Y}\left(y\right)=\frac{1}{S}f_{X}\left(\frac{y-L}{S}\right).\]
-
-\end_inset
-
- Thus, from the standard from provided, the pdf of the actual random numbers
- generated by fixing the location and scale parameters can be quickly found.
-\end_layout
-
-\begin_layout Standard
-In this section, the indicator function
-\begin_inset Formula $I_{A}\left(x\right)$
-\end_inset
-
- will be used where
-\begin_inset Formula $A$
-\end_inset
-
- is a set defined over all the real numbers.
- For clarity,
-\begin_inset Formula \[
-I_{A}\left(x\right)=\left\{ \begin{array}{cc}
-1 & x\in A,\\
-0 & x\not\in A.\end{array}\right.\]
-
-\end_inset
-
- Also, the following functions are used in the definitions:
-\begin_inset Formula \begin{eqnarray*}
-\Gamma\left(x\right) & = & \int_{0}^{\infty}t^{x-1}e^{-t}dt=\left(x-1\right)\Gamma\left(x-1\right),\\
-B\left(a,b\right) & = & \frac{\Gamma\left(a\right)\Gamma\left(b\right)}{\Gamma\left(a+b\right)}.\end{eqnarray*}
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-beta (
-\begin_inset Formula $a$
-\end_inset
-
-,
-\begin_inset Formula $b$
-\end_inset
-
-, size=None)
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-f\left(x;a,b\right)=\frac{1}{B\left(a,b\right)}x^{a-1}\left(1-x\right)^{b-1}I_{\left(0,1\right)}\left(x\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-chisquare (
-\begin_inset Formula $\nu$
-\end_inset
-
-, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- If
-\begin_inset Formula $Z_{1},\ldots,Z_{\nu}$
-\end_inset
-
- are random numbers from standard normal distributions, then
-\begin_inset Formula $W=\sum_{k=1}^{\nu}Z_{k}^{2}$
-\end_inset
-
- is a random number from the chi-square
-\begin_inset Formula $\left(\chi^{2}\right)$
-\end_inset
-
- distribution with
-\begin_inset Formula $\nu$
-\end_inset
-
- degrees of freedom.
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-f\left(x;\nu\right)=\frac{1}{2\Gamma\left(\frac{\nu}{2}\right)}\left(\frac{x}{2}\right)^{\nu/2-1}e^{-x/2}I_{\left[0,\infty\right)}\left(x\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-dirichlet (
-\begin_inset Formula $\boldsymbol{\alpha},$
-\end_inset
-
- size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A vector of random numbers which are drawn from a multivariate Dirichlet
- distribution.
- The length of the parameter vector,
-\begin_inset Formula $\boldsymbol{\alpha},$
-\end_inset
-
- is the length,
-\begin_inset Formula $N$
-\end_inset
-
-, of the random vector.
- The joint pdf is:
-\end_layout
-
-\begin_layout Description
-\begin_inset Formula \[
-f\left(\mathbf{x},\boldsymbol{\alpha}\right)=\frac{\prod_{i=1}^{N}\Gamma\left(\alpha_{i}\right)}{\Gamma\left(\sum_{i=1}^{N}\alpha_{i}\right)}\prod_{i=1}^{N}x_{i}^{\alpha_{i}-1}.\]
-
-\end_inset
-
-
-\series medium
-
-\end_layout
-
-\begin_layout Description
-exponential (scale=1.0, size=None)
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-f\left(x\right)=e^{-x}I_{\left[0,\infty\right)}\left(x\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-f (
-\begin_inset Formula $\nu_{1}$
-\end_inset
-
-,
-\begin_inset Formula $\nu_{2}$
-\end_inset
-
-, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The distribution of
-\begin_inset Formula $\frac{X_{1}/\nu_{1}}{X_{2}/\nu_{2}}$
-\end_inset
-
- where
-\begin_inset Formula $X_{i}$
-\end_inset
-
- is chi-squared with
-\begin_inset Formula $\nu_{i}$
-\end_inset
-
- degrees of freedom.
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-f\left(x;\nu_{1},\nu_{2}\right)=\frac{\nu_{2}^{\nu_{2}/2}\nu_{1}^{\nu_{1}/2}x^{\nu_{1}/2-1}}{\left(\nu_{2}+\nu_{1}x\right)^{\left(\nu_{1}+\nu_{2}\right)/2}B\left(\frac{\nu_{1}}{2},\frac{\nu_{2}}{2}\right)}I_{\left[0,\infty\right)}\left(x\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-gamma (
-\begin_inset Formula $a$
-\end_inset
-
-, scale=1.0, size=None)
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-f\left(x;a\right)=\frac{1}{\Gamma\left(a\right)}x^{a-1}e^{-x}I_{\left[0,\infty\right)}\left(x\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-gumbel (loc=0.0, scale=1.0, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A right-skewed extreme value distribution.
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-f\left(x\right)=\exp\left[-x-e^{-x}\right].\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-laplace (loc=0.0, scale=1.0, size=None)
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-f\left(x\right)=\frac{1}{2}e^{-\left|x\right|}.\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-lognormal (
-\begin_inset Formula $\mu$
-\end_inset
-
-=0.0,
-\begin_inset Formula $\sigma$
-\end_inset
-
-=1.0, size=None)
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-f\left(x;\mu,\sigma\right)=\frac{1}{\sigma x\sqrt{2\pi}}\exp\left[-\frac{1}{2}\left(\frac{\log x-\mu}{\sigma}\right)^{2}\right]I_{\left[0,\infty\right)}\left(x\right),\]
-
-\end_inset
-
-The parameters,
-\begin_inset Formula $\mu$
-\end_inset
-
- and
-\begin_inset Formula $\sigma$
-\end_inset
-
- are not the mean and variance of this distribution, but the parameters
- of the underlying normal distribution.
- Random numbers from this distribution are generated as
-\begin_inset Formula $e^{\sigma Z+\mu}$
-\end_inset
-
- where
-\begin_inset Formula $Z$
-\end_inset
-
- is a standard normal random number.
-
-\end_layout
-
-\begin_layout Description
-logistic (loc=0.0, scale=1.0, size=None)
-\begin_inset Formula \[
-f\left(x\right)=\frac{e^{-x}}{\left[1+e^{-x}\right]^{2}}I_{\left[0,\infty\right)}\left(x\right)\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-multivariate_normal (
-\begin_inset Formula $\mathbf{\boldsymbol{\mu}}$
-\end_inset
-
-,
-\begin_inset Formula $\mathbf{C}$
-\end_inset
-
-, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns a vector of random numbers which are jointly drawn from a multivariate
- normal distribution.
- The last-dimension of the output array contains the sample vector, which
- is of length
-\begin_inset Formula $N=\textrm{len}\left(mean\right).$
-\end_inset
-
- The covariance matrix must be
-\begin_inset Formula $N\times N$
-\end_inset
-
-.
- If
-\begin_inset Formula $\boldsymbol{\mu}\equiv mean$
-\end_inset
-
- and
-\begin_inset Formula $\mathbf{C}=cov$
-\end_inset
-
-, then the joint-pdf representing the returned random vector(s) is
-\begin_inset Formula \[
-f\left(\mathbf{x}\right)=\frac{1}{\sqrt{\left(2\pi\right)^{N}\left|\mathbf{C}\right|}}\exp\left[-\frac{1}{2}\left(\mathbf{x}-\boldsymbol{\mu}\right)^{T}\mathbf{C}^{-1}\left(\mathbf{x}-\boldsymbol{\mu}\right)\right].\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-noncentral_chisquare (
-\begin_inset Formula $\nu$
-\end_inset
-
-,
-\begin_inset Formula $\lambda$
-\end_inset
-
-, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This is the distribution of
-\begin_inset Formula $\sum_{i=1}^{\nu}\left(Z_{i}+\delta_{i}\right)^{2}$
-\end_inset
-
- where
-\begin_inset Formula $Z_{i}$
-\end_inset
-
- are independent standard normal random numbers and
-\begin_inset Formula $\delta_{i}$
-\end_inset
-
- are constants.
- It is a a generalized Rayleigh-Rice distribution:
-\end_layout
-
-\begin_deeper
-\begin_layout Standard
-\begin_inset Formula \[
-f\left(x;\nu,\lambda\right)=e^{-\left(\lambda+x\right)/2}\frac{1}{2}\left(\frac{x}{\lambda}\right)^{\left(\nu-2\right)/4}I_{\left(\nu-2\right)/2}\left(\sqrt{\lambda x}\right)I_{\left(0,\infty\right)}\left(x\right),\]
-
-\end_inset
-
- where
-\begin_inset Formula $I_{\nu}\left(z\right)$
-\end_inset
-
- (a real-number in the subscript, not an interval) is the modified Bessel
- Function of the first kind.
-
-\end_layout
-
-\end_deeper
-\begin_layout Description
-noncentral_f (
-\begin_inset Formula $\nu_{1}$
-\end_inset
-
-,
-\begin_inset Formula $\nu_{2}$
-\end_inset
-
-,
-\begin_inset Formula $\lambda$
-\end_inset
-
-, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The pdf of this distribution is
-\begin_inset Formula \begin{eqnarray*}
-f\left(x;\nu_{1},\nu_{2},\lambda\right) & = & \exp\left[\frac{\lambda}{2}+\frac{\lambda v_{1}x}{2\left(\nu_{1}x+\nu_{2}\right)}\right]\nu_{1}^{\nu_{1}/2}\nu_{2}^{\nu_{2}/2}x^{\nu_{1}/2-1}\\
- & & \times\left(\nu_{2}+\nu_{1}x\right)^{-\left(\nu_{1}+\nu_{2}\right)/2}\\
- & & \times\frac{\Gamma\left(\frac{\nu_{1}}{2}\right)\Gamma\left(1+\frac{\nu_{2}}{2}\right)L_{n_{2}/2}^{n_{1}/2-1}\left(-\frac{\lambda\nu_{1}x}{2\left(\nu_{1}x+\nu_{2}\right)}\right)}{B\left(\frac{\nu_{1}}{2},\frac{\nu_{2}}{2}\right)\Gamma\left(\frac{\nu_{1}+\nu_{2}}{2}\right)}.\end{eqnarray*}
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-normal (loc=0.0, scale=1.0, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The normal, or Gaussian, distribution is the limiting distribution of independe
-nt samples from any sufficiently well-behaved distributions (this is the
- content of the celebrated central limit theorem).
- The normal distribution is also the distribution of maximum entropy when
- the mean and variance alone are fixed.
- These two facts account for its name as well as the wide variety of situations
- that can be usefully modelled using the normal distribution.
- Because it is so widely used, the full pdf with the location
-\begin_inset Formula $\left(\mu\right)$
-\end_inset
-
- and scale
-\begin_inset Formula $\left(\sigma\right)$
-\end_inset
-
- parameters is provided:
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-f\left(x\right)=\frac{1}{\sigma\sqrt{2\pi}}\exp\left[-\frac{\left(x-\mu\right)^{2}}{2\sigma^{2}}\right].\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-pareto (
-\begin_inset Formula $a$
-\end_inset
-
-, size=None)
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-f\left(x;a\right)=\frac{a}{x^{a+1}}I_{\left[1,\infty\right)}\left(x\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-power (
-\begin_inset Formula $a$
-\end_inset
-
-, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A special case of the beta distribution with
-\begin_inset Formula $b=1.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-f\left(x;a\right)=ax^{a-1}I_{\left[0,1\right]}\left(x\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-rand (
-\begin_inset Formula $d_{1}$
-\end_inset
-
-,
-\begin_inset Formula $d_{2}$
-\end_inset
-
-,
-\begin_inset Formula $\ldots$
-\end_inset
-
-,
-\begin_inset Formula $d_{n}$
-\end_inset
-
-)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A convenient interface to obtain an array of shape
-\begin_inset Formula $\left(d_{1},d_{2},\ldots,d_{n}\right)$
-\end_inset
-
- of uniform random numbers in the interval
-\begin_inset Formula $\left[0,1\right).$
-\end_inset
-
- Notice the different convention for passing in the shape (as separate arguments
- instead of a tuple).
- The standard convention is used in the function numpy.random.random(shape)
- for which this function is merely a convenient short-hand.
- If you have a tuple named shape, then rand(*shape) will work correctly.
-\end_layout
-
-\begin_layout Description
-randint (low, high=None, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equally probably random integers in the range
-\begin_inset Formula $low\leq x<high$
-\end_inset
-
-.
- If
-\begin_inset Formula $high$
-\end_inset
-
- is None, then the range is
-\begin_inset Formula $0\leq x<low$
-\end_inset
-
-.
- Similar to random_integers, but check the difference on the bounds.
-\end_layout
-
-\begin_layout Description
-randn (
-\begin_inset Formula $d_{1}$
-\end_inset
-
-,
-\begin_inset Formula $d_{2}$
-\end_inset
-
-,
-\begin_inset Formula $\ldots$
-\end_inset
-
-,
-\begin_inset Formula $d_{n}$
-\end_inset
-
-)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A convenient interface to obtain an array of shape
-\begin_inset Formula $\left(d_{1},d_{2},\ldots,d_{n}\right)$
-\end_inset
-
- of standard normal
-\begin_inset Formula $\left(\mu=0,\,\sigma=1\right)$
-\end_inset
-
- random numbers.
- Notice the different convention for passing in the shape (as separate arguments
- intead of a tuple).
- The standard convention is used in the function numpy.random.standard_normal(shap
-e) for which this function is merely a convenient short-hand.
- If you have a tuple named shape, then randn(*shape) will work correctly.
-\end_layout
-
-\begin_layout Description
-random_integers (low, high=None, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Equally probably random integers in the range
-\begin_inset Formula $low\leq x\leq high$
-\end_inset
-
-.
- If high is None, then the range is
-\begin_inset Formula $1\leq x\leq low$
-\end_inset
-
-.
- Similar to randint, but check the difference on the bounds.
-\end_layout
-
-\begin_layout Description
-rayleigh (scale=1.0, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Rayleigh-distributed random numbers can be obtained as
-\begin_inset Formula $X=\sqrt{Z_{1}^{2}+Z_{2}^{2}}$
-\end_inset
-
- where
-\begin_inset Formula $Z_{i}$
-\end_inset
-
- are independent standard normal random numbers.
- The scale parameter is also the mode of the distribution (the value of
-
-\begin_inset Formula $X$
-\end_inset
-
- with highest probability).
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-f\left(x\right)=xe^{-x^{2}/2}I_{[0,\infty)}\left(x\right)\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-standard_cauchy (size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A Cauchy distribution is a heavy-tailed distribution with no variance.
- It's distribution is that of the ratio of two standard normal distributions
-
-\begin_inset Formula $Z_{1}/Z_{2}.$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-f\left(x\right)=\frac{1}{\pi\left(1+x^{2}\right)}.\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-standard_exponential (size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A standard exponetial random number with scale=1.0.
- The pdf was given under the description of
-\family typewriter
-random.exponential
-\family default
-.
-\end_layout
-
-\begin_layout Description
-standard_gamma (
-\begin_inset Formula $a$
-\end_inset
-
-, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A standard gamma random number with scale=1.0.
- The pdf was given under the description of
-\family typewriter
-random.gamma
-\family default
-.
-\end_layout
-
-\begin_layout Description
-standard_normal (size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A zero-mean, unit-variance, normally distributed random number often denoted
-
-\begin_inset Formula $Z.$
-\end_inset
-
-
-\begin_inset Formula \[
-f\left(x\right)=\frac{1}{\sqrt{2\pi}}e^{-x^{2}/2}.\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-standard_t (
-\begin_inset Formula $\nu$
-\end_inset
-
-, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Often called Student's t distribution, this random number distribution
- arises in the problem of estimating the mean of normally distributed samples
- when the sample-size is small.
- The first parameter,
-\begin_inset Formula $\nu$
-\end_inset
-
-, is the number of degrees of freedom of the distribution.
-
-\begin_inset Formula \[
-f\left(x;\nu\right)\frac{\Gamma\left(\frac{\nu+1}{2}\right)}{\sqrt{\pi\nu}\Gamma\left(\frac{\nu}{2}\right)\left[1+\frac{x^{2}}{\nu}\right]^{\frac{\nu+1}{2}}}.\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-triangular (left, mode, right, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns random numbers according to a triangularly-shaped density that
- starts at left, peaks at mode, and ends at right.
-\end_layout
-
-\begin_layout Description
-uniform (low=0.0, high=1.0, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns random numbers that are equally probable over the range
-\begin_inset Formula $\left[low,\, high\right).$
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-vonmises (
-\begin_inset Formula $\mu$
-\end_inset
-
-,
-\begin_inset Formula $\kappa$
-\end_inset
-
-, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A continuous distribution that is well suited for circular attributes such
- as angles, time of day, day of the year, etc.
- The mean direction is
-\begin_inset Formula $\mu$
-\end_inset
-
- and concentration (or dispersion) parameter is
-\begin_inset Formula $\kappa.$
-\end_inset
-
- For small
-\begin_inset Formula $\kappa$
-\end_inset
-
- the distribution tends towards a uniform distribution over
-\begin_inset Formula $\left[-\pi,\pi\right].$
-\end_inset
-
- For large
-\begin_inset Formula $\kappa$
-\end_inset
-
-, the distribution tends towards a normal distribution with mean
-\begin_inset Formula $\mu$
-\end_inset
-
- and variance
-\begin_inset Formula $1/\kappa.$
-\end_inset
-
-
-\begin_inset Formula \[
-f\left(x\right)=\frac{e^{\kappa\cos\left(x-\mu\right)}}{2\pi I_{0}\left(\kappa\right)}I_{\left[-\pi,\pi\right]}\left(x\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-wald (
-\begin_inset Formula $\mu$
-\end_inset
-
-,
-\begin_inset Formula $\lambda$
-\end_inset
-
-, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This distribution is also called the inverse Gaussian distribution (and
- the Wald distribution considered as a special case when
-\begin_inset Formula $\mu=\lambda$
-\end_inset
-
-).
- It can be generated by noticing that if
-\begin_inset Formula $X$
-\end_inset
-
- is a wald random number then
-\begin_inset Formula $\frac{\lambda\left(X-\mu\right)^{2}}{\mu^{2}X}$
-\end_inset
-
- is the square of a standard normal random number (i.e.
- it is chi-square with one degree of freedom).
- The pdf is
-\begin_inset Formula \[
-f\left(x\right)=\sqrt{\frac{\lambda}{2\pi x^{3}}}e^{-\frac{\lambda\left(x-\mu\right)^{2}}{2\mu^{2}x}}.\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Description
-weibull (
-\begin_inset Formula $a$
-\end_inset
-
-, size=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- An extreme-value distribution:
-\end_layout
-
-\begin_layout Standard
-\begin_inset Formula \[
-f\left(x;c\right)=ax^{a-1}\exp\left(-x^{a}\right)I_{\left(0,\infty\right)}\left(x\right).\]
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-Miscellaneous utilities
-\end_layout
-
-\begin_layout Description
-bytes (length)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a string of random bytes of the provided length.
-\end_layout
-
-\begin_layout Description
-get_state ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an object that holds the state of the random number generator (allows
- you to restart simulations where you left off).
-\end_layout
-
-\begin_layout Description
-set_state (state)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Set the state of the random number generator.
- The argument should be the returned object of a previous get_state command.
-\end_layout
-
-\begin_layout Description
-shuffle (sequence)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Randomly permute the items of any sequence.
- If sequence is an array, then it must be 1-d.
-\end_layout
-
-\begin_layout Description
-permutation (n)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a permutation of the integers from 0 to n-1.
-
-\begin_inset LatexCommand index
-name "random!continuous|)"
-
-\end_inset
-
-
-\begin_inset LatexCommand index
-name "random|)"
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Matrix-specific functions (matlib)
-\end_layout
-
-\begin_layout Standard
-This module contains functions that are geared specifically toward matrix
- objects.
- In particular it includes the functions
-\series bold
-empty
-\series default
-,
-\series bold
-ones
-\series default
-,
-\series bold
-zeros
-\series default
-,
-\series bold
-identity
-\series default
-,
-\series bold
-eye
-\series default
-,
-\series bold
-rand
-\series default
-, and
-\series bold
-randn
-\series default
- each of which returns a matrix object by default instead of an ndarray
- object.
-\end_layout
-
-\begin_layout Section
-Ctypes utiltity functions (ctypeslib)
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "ctypeslib"
-
-\end_inset
-
-This module contains utility functions that make it easier to work with
- the ctypes module.
-
-\end_layout
-
-\begin_layout Description
-load_library (name, path)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Load a shared library named
-\begin_inset Quotes eld
-\end_inset
-
-name
-\begin_inset Quotes erd
-\end_inset
-
- (use the full name including any prefix but excluding the extension) located
- in the directory indicated by path and return a ctypes library object whose
- attributes are the functions in the library.
- If ctypes is not available, this function will raise an ImportError.
- If there is an error loading the library, ctypes raises an OSError.
- The extension is appended to the library name (on a platform-dependent
- basis) unless the name includes the
-\begin_inset Quotes eld
-\end_inset
-
-.
-\begin_inset Quotes erd
-\end_inset
-
- character in which case name is assumed to be the
-\begin_inset Quotes eld
-\end_inset
-
-full-name
-\begin_inset Quotes erd
-\end_inset
-
- of the library.
-
-\end_layout
-
-\begin_layout Description
-ndpointer (dtype=None, ndim=None, shape=None, flags=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Create a class object that can be used in the argtypes list of a ctypes
- function that will do basic type, number-of-dimensions, shape, and flags
- checking on input array objects.
- Setting an argtypes entry with the result of this function allows passing
- arrays directly to ctypes-wrapped functions.
- The returned class object will contain a from_param method as required
- by ctypes.
- This from_param method takes the array object, does data-type, number-of-dimens
-ions, shape, and flags checking on the object and if all tests pass returns
- an object that ctypes can use as the data area of the array.
- Checking is not performed for any entries which are None in this class
- creation function.
-
-\end_layout
-
-\begin_layout Chapter
-Testing and Packaging
-\end_layout
-
-\begin_layout Quotation
-Research is what I'm doing when I don't know what I'm doing.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Werner von Braun
-\end_layout
-
-\begin_layout Quotation
-The most likely way for the world to be destroyed, most experts agree, is
- by accident.
- That's where we come in; we're computer professionals.
- We cause accidents.
-\end_layout
-
-\begin_layout Right Address
----
-\emph on
-Nathaniel Borenstein
-\end_layout
-
-\begin_layout Standard
-There are two additional sub-packages distributed with NumPy that simplify
- the process of distributing and testing code based on NumPy.
- The numpy.distutils sub-package extends the standard distutils package to
- handle Fortran code along with providing support for the auto-generated
- code in NumPy.
- The numpy.testing sub-package defines a few functions and classes for standardiz
-ing unit-tests in NumPy.
- These facilities can be used in your own packages that build on top of
- NumPy.
-
-\end_layout
-
-\begin_layout Section
-Testing
-\end_layout
-
-\begin_layout Standard
-In this sub-package are two classes and some useful utilities for writing
- unit-tests
-\end_layout
-
-\begin_layout Description
-NumpyTestCase a subclass of unittest.TestCase which adds a measure method
- that can determine the elasped time to execute a code string and enhances
- the __call__ method
-\end_layout
-
-\begin_layout Description
-NumpyTest the test manager for NumPy which was extracted originally from
- the SciPy code base.
- This test manager makes it easy to add unit-tests to a package simply by
- creating a tests sub-directory with files named test_<module>.py.
- These test files should then define sub-classes of NumpyTestCase (or unittest.Te
-stCase) named
-\begin_inset Quotes eld
-\end_inset
-
-test*
-\begin_inset Quotes erd
-\end_inset
-
-.
- These classes should then define functions named
-\begin_inset Quotes eld
-\end_inset
-
-test*
-\begin_inset Quotes erd
-\end_inset
-
- or
-\begin_inset Quotes eld
-\end_inset
-
-bench*
-\begin_inset Quotes erd
-\end_inset
-
- or
-\begin_inset Quotes eld
-\end_inset
-
-check*
-\begin_inset Quotes erd
-\end_inset
-
- that contain the actual unit-tests.
- The first keyword argument should specify the level above which this test
- should be run.
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- To run the tests excecute NumpyTest(<package>).test(level=1, verbosity=1)
- which will run all tests above the given level using the given verbosity.
- Here <package> can be either a string or a previously imported module.
- You can get the level and verbosity arguments from sys.argv using NumpyTest(<pac
-kage>).run() with -v or --verbosity and -l or --level as command-line arguments.
-\end_layout
-
-\begin_layout Description
-set_local_path (reldir='', level=1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- prepend local directory (+ reldir) to sys.path.
- The caller is responsible for removing this path using restore_path().
-\end_layout
-
-\begin_layout Description
-set_package_path (level=1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- prepend package directory to sys.path.
- This should be called from a test_file.py that satisfies the tree structure:
- <somepath>/<somedir>/test_file.py.
- The, the first existing path name from the list <somepath>/build/lib.<platform>-
-<version>, <somepath>/..
- is pre-pended to sys.path.
- The caller is responsible for removing this path using restore_path().
-\end_layout
-
-\begin_layout Description
-restore_path ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Remove the first entry from sys.path.
-\end_layout
-
-\begin_layout Description
-assert_equal (actual, desired, err_msg='', verbose=1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Raise an assertion error if the two items are not equal.
- Automatically calls assert_array_equal if actual or desired is an ndarray.
-
-\end_layout
-
-\begin_layout Description
-assert_almost_equal (actual, desired, decimal=7, err_msg='', verbose=1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Raise an assertion error if the two items are not equal within decimal
- places.
- Automatically calls assert_array_almost_equal if actual or desired is an
- ndarray.
-\end_layout
-
-\begin_layout Description
-assert_approx_equal (actual, desired, significant=7, err_msg='', verbose=1)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Raise an assertion error if the two items are not equal to within the given
- significant digits.
- Does not work on arrays.
-
-\end_layout
-
-\begin_layout Description
-assert_array_equal (x, y, err_msg='')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Raise an error if the two arrays x and y are not equal at every element.
-
-\end_layout
-
-\begin_layout Description
-assert_array_less (x, y, err_msg='')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Raise an error if the two arrays x and y have different shapes or if x
- is not less than y at every element.
-
-\end_layout
-
-\begin_layout Description
-assert_array_almost_equal (x, y, decimal=6, err_msg='')
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Raise an error if x and y are not equal to decimal places at every element.
-\end_layout
-
-\begin_layout Description
-jiffies ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a number of 1/100ths of a second that this process has been scheduled
- in user mode.
- Implemented using time.time() unless on Linux where the special /proc directory
- filesystem is used.
-
-\end_layout
-
-\begin_layout Description
-memusage ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the virtual memory size in bytes of the running python.
- If the operation is not supported on the platform, then return None.
- This works only on linux for now.
-\end_layout
-
-\begin_layout Description
-rand (*args)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return an array of random numbers with the given shape using only the standard
- library random number generator.
-\end_layout
-
-\begin_layout Description
-runstring (astr, dict)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Run the given string in the dictionary provided.
- Functional form for (exec astr in dict) that is useful for the failUnlessRaises
- method of unittest.TestCase class.
-\end_layout
-
-\begin_layout Section
-NumPy Distutils
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "distutils"
-
-\end_inset
-
-NumPy provides enhanced distutils functionality to make it easier to build
- and install sub-packages, auto-generate code, and extension modules that
- use Fortran-compiled libraries.
- To use features of numpy distutils use the setup command from numpy.distutils.cor
-e.
- A useful Configuration class is also provided in numpy.distutils.misc_util
- that can make it easier to construct keyword arguments to pass to the setup
- function (by passing the dictionary obtained from the todict() method of
- the class).
- More information is available in the NumPy Distutils Users Guide in <site-packa
-ges>/numpy/doc/DISTUTILS.txt.
-\end_layout
-
-\begin_layout Subsection
-misc_util
-\end_layout
-
-\begin_layout Description
-Configuration (package_name=None, parent_name=None, top_path=None, package_path=
-None, **attrs)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
-
-\begin_inset LatexCommand index
-name "Configuration"
-
-\end_inset
-
-Construct a configuration instance for the given package name.
- If parent_name is not None, then construct the package as a sub-package
- of the parent_name package.
- If top_path and package_path are None then they are assumed equal to the
- path of the file this instance was created in.
- The setup.py files in the numpy distribution are good examples of how to
- use the Configuration instance.
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-self.todict ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a dictionary compatible with the keyword arguments of distutils
- setup function.
- Thus, this method may be used as setup(**config.todict()).
-\end_layout
-
-\begin_layout Description
-self.get_distribution ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the distutils distribution object for self.
-\end_layout
-
-\begin_layout Description
-self.get_subpackage (subpackage_name, subpackage_path=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a Configuration instance for the sub-package given.
- If subpackage_path is None then the path is assumed to be the local path
- plus the subpackage_name.
- If a setup.py file is not found in the subpackage_path, then a default configura
-tion is used.
-\end_layout
-
-\begin_layout Description
-self.add_subpackage (subpackage_name, subpackage_path=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Add a sub-package to the current Configuration instance.
- This is useful in a setup.py script for adding sub-packages to a package.
- The sub-package is contained in subpackage_path / subpackage_name and this
- directory may contain a setup.py script or else a default setup (suitable
- for Python-code-only subpackages) is assumed.
- If the subpackage_path is None, then it is assumed to be located in the
- local path / subpackage_name.
-
-\end_layout
-
-\begin_layout Description
-self.add_data_files (*files)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Add files to the list of data_files to be included with the package.
- The form of each element of the files sequence is very flexible allowing
- many combinations of where to get the files from the package and where
- they should ultimately be installed on the system.
- The most basic usage is for an element of the files argument sequence to
- be a simple filename.
- This will cause that file from the local path to be installed to the installati
-on path of the self.name package (package path).
- The file argument can also be a relative path in which case the entire
- relative path will be installed into the package directory.
- Finally, the file can be an absolute path name in which case the file will
- be found at the absolute path name but installed to the package path.
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- This basic behavior can be augmented by passing a 2-tuple in as the file
- argument.
- The first element of the tuple should specify the relative path (under
- the package install directory) where the remaining sequence of files should
- be installed to (it has nothing to do with the file-names in the source
- distribution).
- The second element of the tuple is the sequence of files that should be
- installed.
- The files in this sequence can be filenames, relative paths, or absolute
- paths.
- For absolute paths the file will be installed in the top-level package
- installation directory (regardless of the first argument).
- Filenames and relative path names will be installed in the package install
- directory under the path name given as the first element of the tuple.
- An example may clarify:
-\end_layout
-
-\begin_deeper
-\begin_layout LyX-Code
-self.add_data_files('foo.dat',
-\newline
-('fun', ['gun.dat', 'nun/pun.dat', '/tmp/sun.dat']),
-
-\newline
-'bar/cat.dat',
-\newline
-'/full/path/to/can.dat')
-\end_layout
-
-\begin_layout Standard
-will install these data files to:
-\end_layout
-
-\begin_layout LyX-Code
-<package install directory>/
-\newline
- foo.dat
-\newline
- fun/
-\newline
- gun.dat
-\newline
- nun/
-\newline
- pun.dat
-\newline
- sun.dat
-\newline
-
- bar/
-\newline
- car.dat
-\newline
- can.dat
-\end_layout
-
-\begin_layout Standard
-where <package install directory> is the package (or sub-package) directory
- such as '/usr/lib/python2.4/site-packages/mypackage' ('C:
-\backslash
-
-\backslash
-Python2.4
-\backslash
-
-\backslash
-Lib
-\backslash
-
-\backslash
-site-packages
-\backslash
-
-\backslash
-mypackage') or '/usr/lib/python2.4/site-packages/mypackage/mysubpackage'
- ('C:
-\backslash
-
-\backslash
-Python2.4
-\backslash
-
-\backslash
-Lib
-\backslash
-
-\backslash
-site-packages
-\backslash
-
-\backslash
-mypackage
-\backslash
-
-\backslash
-mysubpackage').
-\end_layout
-
-\end_deeper
-\begin_layout Standard
-\InsetSpace ~
- An additional feature is that the path to a data-file can actually be a
- function that takes no arguments and returns the actual path(s) to the
- data-files.
- This is useful when the data files are generated while building the package.
-
-\end_layout
-
-\begin_layout Description
-self.add_data_dir (data_path)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Recursively add files under data_path to the list of data_files to be installed
- (and distributed).
- The data_path can be either a relative path-name, or an absolute path-name,
- or a 2-tuple where the first argument shows where in the install directory
- the data directory should be installed to.
- For example suppose the source directory contains fun/foo.dat and fun/bar/car.dat
-\end_layout
-
-\begin_layout LyX-Code
-self.add_data_dir('fun')
-\newline
-self.add_data_dir(('sun', 'fun'))
-\newline
-self.add_data_dir(('gun',
- '/full/path/to/fun'))
-\end_layout
-
-\begin_layout Standard
-\InsetSpace ~
- Will install data-files to the locations
-\end_layout
-
-\begin_layout LyX-Code
-<package install directory>/
-\newline
- fun/
-\newline
- foo.dat
-\newline
- bar/
-\newline
- car.dat
-\newline
- sun/
-\newline
-
- foo.dat
-\newline
- bar/
-\newline
- car.dat
-\newline
- gun/
-\newline
- foo.dat
-\newline
- car.dat
-\end_layout
-
-\begin_layout Description
-self.add_include_dirs (*paths)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Add the given sequence of paths to the beginning of the include_dirs list.
- This list will be visible to all extension modules of the current package.
-\end_layout
-
-\begin_layout Description
-self.add_headers (*files)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Add the given sequence of files to the beginning of the headers list.
- By default, headers will be installed under <python-include>/<self.name.replace('.
-','/')>/ directory.
- If an item of files is a tuple, then its first argument specifies the actual
- installation location relative to the <python-include> path.
-\end_layout
-
-\begin_layout Description
-self.add_extension (name, sources, **kw)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Create and add an Extension instance to the ext_modules list.
- The first argument defines the name of the extension module that will be
- installed under the self.name package.
- The second argument is a list of sources.
- This method also takes the following optional keyword arguments that are
- passed on to the Extension constructor: include_dirs, define_macros, undef_macr
-os, library_dirs, libraries, runtime_library_dirs, extra_objects, swig_opts,
- depends, language, f2py_options, module_dirs, and extra_info.
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The self.paths(...) method is applied to all lists that may contain paths.
- The extra_info is a dictionary or a list of dictionaries whose content
- will be appended to the keyword arguments.
- The depends list contains paths to files or directories that the sources
- of the extension module depend on.
- If any path in the depends list is newer than the extension module, then
- the module will be rebuilt.
-
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- The list of sources may contain functions (called source generators) which
- must take an extension instance and a build directory as inputs and return
- a source file or list of source files or None.
- If None is returned then no sources are generated.
- If the Extension instance has no sources after processing all source generators
-, then no extension module is built.
-
-\end_layout
-
-\begin_layout Description
-self.add_library (name, sources, **build_info)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Add a library to the list of libraries.
- Allowed keyword arguments are depends, macros, include_dirs, extra_compiler_arg
-s, and f2py_options.
- The name is the name of the library to be built and sources is a list of
- sources (or source generating functions) to add to the library.
-\end_layout
-
-\begin_layout Description
-self.add_scripts (*files)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Add the sequence of files to the beginning of the scripts list.
- Scripts will be installed under the <prefix>/bin/ directory.
-
-\end_layout
-
-\begin_layout Description
-self.paths (*paths)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Applies glob.glob(...) to each path in the sequence (if needed) and pre-pends
- the local_path if needed.
- Because this is called on all source lists, this allows wildcard characters
- to be specified in lists of sources for extension modules and libraries
- and scripts and allows path-names be relative to the source directory.
-\end_layout
-
-\begin_layout Description
-self.get_config_cmd ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns the numpy.distutils config command instance.
-\end_layout
-
-\begin_layout Description
-self.get_build_temp_dir ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a path to a temporary directory where temporary files should be
- placed.
-\end_layout
-
-\begin_layout Description
-self.have_f77c ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- True if a Fortran 77 compiler is available (because a simple Fortran 77
- code was able to be compiled successfully).
-\end_layout
-
-\begin_layout Description
-self.have_f90c ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- True if a Fortran 90 compiler is available (because a simple Fortran 90
- code was able to be compiled successfully)
-\end_layout
-
-\begin_layout Description
-self.get_version ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a version string of the current package or None if the version informati
-on could not be detected.
- This method scans files named __version__.py, <packagename>_version.py, version.py
-, and __svn_version__.py for string variables version, __version__, and <packagen
-ame>_version, until a version number is found.
-\end_layout
-
-\begin_layout Description
-self.make_svn_version_py ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Appends a data function to the data_files list that will generate __svn_version
-__.py file to the current package directory.
- This file will be removed from the source directory when Python exits (so
- that it can be re-generated next time the package is built).
- This is intended for working with source directories that are in an SVN
- repository.
-
-\end_layout
-
-\begin_layout Description
-self.make_config_py ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Generate a package __config__.py file containing system information used
- during the building of the package.
- This file is installed to the package installation directory.
-\end_layout
-
-\begin_layout Description
-self.get_info (*names)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return information (from system_info.get_info) for all of the names in the
- argument list in a single dictionary.
-
-\end_layout
-
-\end_deeper
-\begin_layout Description
-get_numpy_include_dirs ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the include directory where the numpy/arrayobject.h and numpy/ufuncobject.
-h files are found.
- This should be added to the include_dirs of any extension module built
- using NumPy.
- If numpy.distutils is used to build the extension, then this directory is
- added automatically.
-
-\end_layout
-
-\begin_layout Description
-get_numarray_include_dirs ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the include directory where the numpy/libnumarray.h file is found.
- This should be added to the include_dirs of any extension module that relies
- on the Numarray-compatible C-API.
-
-\end_layout
-
-\begin_layout Description
-dict_append (d, **kwds)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Add the keyword arguments given as entries in the dictionary provided as
- the first argument.
- If the entry is already present, then assume it is a list and extend the
- list with the keyword value.
-\end_layout
-
-\begin_layout Description
-appendpath (prefix, path)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Platform-independent intelligence for appending path to prefix.
- It replaces '/' in the prefix and the path with the correct path-separator
- on the platform ad returns a full path name that will be valid for the
- platform.
-
-\end_layout
-
-\begin_layout Description
-allpath (name)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Convert a '/' separated pathname to one using the platform's path separator.
-\end_layout
-
-\begin_layout Description
-dot_join (*args)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Converts a sequence of string arguments to a string joined by '.' (removing
- any empty strings).
-
-\end_layout
-
-\begin_layout Description
-generate_config_py (extension, build_dir)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- A suitable function that can be used in a source list.
- This constructs a python file that contains system_info information used
- during building the package.
- Generally easier to use a Configuration instance and the config.make_config_py()
- method.
-\end_layout
-
-\begin_layout Description
-get_cmd (cmdname, _cache={})
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns an instance of the distutils command object named cmdname if the
- setup distribution instance has been initialized.
- Caches the result in _cache[cmdname] and gets it from there if present.
-\end_layout
-
-\begin_layout Description
-terminal_has_colors ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Tries to determine if the stdout terminal can be written to using ANSI
- colors.
- Returns 1 if it can be determined that ANSI colors are acceptable or 0
- if not.
-
-\end_layout
-
-\begin_layout Description
-red_text (s)
-\end_layout
-
-\begin_layout Description
-green_text (s)
-\end_layout
-
-\begin_layout Description
-yellow_text (s)
-\end_layout
-
-\begin_layout Description
-blue_text (s)
-\end_layout
-
-\begin_layout Description
-cyan_text (s)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- If terminal_has_colors() is true, then these commands return a string with
- the necessary codes prepended to display the given string argument in the
- specified color on an ANSI terminal.
- If terminal_has_colors() is false, then these functions simply return the
- input argument.
-
-\end_layout
-
-\begin_layout Description
-cyg2win32 (path)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Convert a cygwin path beginning with /cygdrive to a standard win32 path
- name.
-
-\end_layout
-
-\begin_layout Description
-all_strings (lst)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return True if all items in the input list are string objects otherwise
- return False.
-\end_layout
-
-\begin_layout Description
-has_f_sources (sources)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return True if any of the source files listed in the input argument are
- Fortran files because its name matches against the compiled regular expression
-
-\series bold
-fortran_ext_match
-\series default
-.
-\end_layout
-
-\begin_layout Description
-has_cxx_sources (sources)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return True if any of the source files listed in the input argument are
- C++ files because its name matches against the compiled regular expression
-
-\series bold
-cxx_ext_match
-\series default
-.
-\end_layout
-
-\begin_layout Description
-filter_sources (sources)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- From the provided list of sources, return four lists of filenames containing
- C, C++, Fortran, and Fortran 90 module sources respectively.
- The compiled regular expressions used in this search (which are also available
- in the misc_util module) are cxx_ext_match, fortran_ext_match, f90_ext_match,
- and f90_module_name_match.
-
-\end_layout
-
-\begin_layout Description
-get_dependencies (sources)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Scan the files in the sources list for include statements.
-\end_layout
-
-\begin_layout Description
-is_local_src_dir (directory)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return True if the provided directory is the local current working directory.
-
-\end_layout
-
-\begin_layout Description
-get_ext_source_files (ext)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Get sources and any include files in the same directory from an Extension
- instance.
-\end_layout
-
-\begin_layout Description
-get_script_files (scripts)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Returns the list scripts with all non-string arguments removed.
-\end_layout
-
-\begin_layout Subsection
-Other modules
-\end_layout
-
-\begin_layout Description
-system_info.get_info (name)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- For the given string representing a particular resource, return a dictionary
- that is compatible with the distutils.setup keyword arguments.
- If this is an empty dictionary, then the requested resource is not available.
- Some of the names that can be checked are 'lapack_opt', 'blas_opt', 'fft_opt',
- 'fftw', 'fftw3', 'fftw2', 'djbfft', 'numpy', 'numarray', 'boost_python',
- 'agg2', 'wx', 'gdk', 'xft', 'freetype2'.
-
-\end_layout
-
-\begin_layout Description
-system_info.get_standard_file (filename)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return a list of length 0 to 3 containing the full-path filenames for the
- filename provided.
- The filename is searched for in three places in the following order 1)
- the system-wide location which is the directory that the system_info file
- is located in; 2) the directory specified by the environment variable HOME;
- and 3) the current local directory.
-
-\end_layout
-
-\begin_layout Description
-cpuinfo.cpu an instance of a cpuinfo class that defines methods for checking
- various aspects of the cpu.
- The info attribute is a list of length (# of CPUs).
- Each entry is a dictionary providing technical information about that CPU.
-
-\end_layout
-
-\begin_layout Description
-log.set_verbosity (level)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Set the distutils logging threshold and return the previously stored value.
- The level is an integer that corresponds to distutils.log thresholds: -1
- <--> ERROR, 0 <--> WARN, 1 <--> INFO, and 2 <--> DEBUG.
-
-\end_layout
-
-\begin_layout Description
-exec_command
-\end_layout
-
-\begin_deeper
-\begin_layout Description
-exec_command (command, execute_in='', use_shell=None, use_tee=None, _with_python
-=1, **env)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return (status, output) of the executed command.
- The command input is a string of executable and arguments.
- The output contains both stderr and stdout messages.
- If execute_in is given, then change to the provided directory prior to
- executing the command and afterwords restore to the current directory.
- On NT, and DOS systems the returned status is correct for external commands.
- However, wild cards will not work for non-posix systems.
-\end_layout
-
-\begin_layout Description
-splitcmdline (line)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Inverse of ' '.join(sys.argv)
-\end_layout
-
-\begin_layout Description
-find_executable (exe, path=None)
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return full path of an executable using information from the PATH environment
- variable.
- Equivalent to the POSIX 'which' command.
-\end_layout
-
-\begin_layout Description
-get_pythonexe ()
-\end_layout
-
-\begin_layout Description
-\InsetSpace ~
- Return the full path to the python executable with some fixes for nt and
- dos to replace pythonw with python if it is encountered.
- A basic wrapper around sys.executable.
-\end_layout
-
-\end_deeper
-\begin_layout Section
-Conversion of .src files
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand index
-name "code generation"
-
-\end_inset
-
-NumPy distutils supports automatic conversion of source files named <somefile>.sr
-c.
- This facility can be used to maintain very similar code blocks requiring
- only simple changes between blocks.
- During the build phase of setup, if a template file named <somefile>.src
- is encountered, a new file named <somefile> is constructed from the template
- and placed in the build directory to be used instead.
- Two forms of template conversion are supported.
- The first form occurs for files named named <file>.ext.src where ext is a
- recognized Fortran extension (f, f90, f95, f77, for, ftn, pyf).
- The second form is used for all other cases.
-
-\end_layout
-
-\begin_layout Subsection
-Fortran files
-\end_layout
-
-\begin_layout Standard
-This template converter will replicate all
-\series bold
-function
-\series default
- and
-\series bold
-subroutine
-\series default
- blocks in the file with names that contain '<...>' according to the rules
- in '<...>'.
- The number of comma-separated words in '<...>' determines the number of times
- the block is repeated.
- What these words are indicates what that repeat rule, '<...>', should be replaced
- with in each block.
- All of the repeat rules in a block must contain the same number of comma-separa
-ted words indicating the number of times that block should be repeated.
- If the word in the repeat rule needs a comma, leftarrow, or rightarrow,
- then prepend it with a backslash '
-\backslash
-'.
- If a word in the repeat rule matches '
-\backslash
-
-\backslash
-<index>' then it will be replaced with the <index>-th word in the same repeat
- specification.
- There are two forms for the repeat rule: named and short.
-\end_layout
-
-\begin_layout Subsubsection
-Named repeat rule
-\end_layout
-
-\begin_layout Standard
-A named repeat rule is useful when the same set of repeats must be used
- several times in a block.
- It is specified using <rule1=item1, item2, item3,..., itemN>, where N is the
- number of times the block should be repeated.
- On each repeat of the block, the entire expression, '<...>' will be replaced
- first with item1, and then with item2, and so forth until N repeats are
- accomplished.
- Once a named repeat specification has been introduced, the same repeat
- rule may be used
-\series bold
-in the current block
-\series default
- by referring only to the name (i.e.
- <rule1>.
-
-\end_layout
-
-\begin_layout Subsubsection
-Short repeat rule
-\end_layout
-
-\begin_layout Standard
-A short repeat rule looks like <item1, item2, item3, ..., itemN>.
- The rule specifies that the entire expression, '<...>' should be replaced
- first with item1, and then with item2, and so forth until N repeats are
- accomplished.
-
-\end_layout
-
-\begin_layout Subsubsection
-Pre-defined names
-\end_layout
-
-\begin_layout Standard
-The following predefined named repeat rules are available:
-\end_layout
-
-\begin_layout Itemize
-<prefix=s,d,c,z>
-\end_layout
-
-\begin_layout Itemize
-<_c=s,d,c,z>
-\end_layout
-
-\begin_layout Itemize
-<_t=real, double precision, complex, double complex>
-\end_layout
-
-\begin_layout Itemize
-<ftype=real, double precision, complex, double complex>
-\end_layout
-
-\begin_layout Itemize
-<ctype=float, double, complex_float, complex_double>
-\end_layout
-
-\begin_layout Itemize
-<ftypereal=float, double precision,
-\backslash
-
-\backslash
-0,
-\backslash
-
-\backslash
-1>
-\end_layout
-
-\begin_layout Itemize
-<ctypereal=float, double,
-\backslash
-
-\backslash
-0,
-\backslash
-
-\backslash
-1>
-\end_layout
-
-\begin_layout Subsection
-Other files
-\end_layout
-
-\begin_layout Standard
-Non-Fortran files use a separate syntax for defining template blocks that
- should be repeated using a variable expansion similar to the named repeat
- rules of the Fortran-specific repeats.
- The template rules for these files are:
-\end_layout
-
-\begin_layout Enumerate
-\begin_inset Quotes eld
-\end_inset
-
-/**begin repeat
-\begin_inset Quotes erd
-\end_inset
-
- on a line by itself marks the beginning of a segment that should be repeated.
-\end_layout
-
-\begin_layout Enumerate
-Named variable expansions are defined using #name=item1, item2, item3, ...,
- itemN# and placed on successive lines.
- These variables are replaced in each repeat block with corresponding word.
- All named variables in the same repeat block must define the same number
- of words.
-
-\end_layout
-
-\begin_layout Enumerate
-In specifying the repeat rule for a named variable, item*N is short-hand
- for item, item, ..., item repeated N times.
- In addition, parenthesis in combination with *N can be used for grouping
- several items that should be repeated.
- Thus, #name=(item1, item2)*4# is equivalent to #name=item1, item2, item1,
- item2, item1, item2, item1, item2#
-\end_layout
-
-\begin_layout Enumerate
-\begin_inset Quotes eld
-\end_inset
-
-*/
-\begin_inset Quotes erd
-\end_inset
-
- on a line by itself marks the end of the the variable expansion naming.
- The next line is the first line that will be repeated using the named rules.
-\end_layout
-
-\begin_layout Enumerate
-Inside the block to be repeated, the variables that should be expanded are
- specified as @name@.
-
-\end_layout
-
-\begin_layout Enumerate
-\begin_inset Quotes eld
-\end_inset
-
-/**end repeat**/
-\begin_inset Quotes erd
-\end_inset
-
- on a line by itself marks the previous line as the last line of the block
- to be repeated.
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset Include \input{capi.lyx}
-preview false
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset LatexCommand printindex
-
-\end_inset
-
-
-\end_layout
-
-\end_body
-\end_document