Appendix A. Advanced NumPy
In this appendix, I will go deeper into the NumPy library for array computing. This will include more internal detail about the ndarray type and more advanced array manipulations and algorithms.
This appendix contains miscellaneous topics and does not necessarily need to be read linearly.
A.1 ndarray Object Internals
The NumPy ndarray provides a means to interpret a block of homogeneous data (either contiguous or strided) as a multidimensional array object. The data type, or dtype, determines how the data is interpreted as being floating point, integer, boolean, or any of the other types we’ve been looking at.
Part of what makes ndarray flexible is that every array object is a
strided view on a block of data. You might wonder,
for example, how the array view
::-1] does not copy any data. The reason is that the ndarray is
more than just a chunk of memory and a dtype; it also has “striding”
information that enables the array to move through memory with varying
step sizes. More precisely, the ndarray internally consists of the
A pointer to data—that is, a block of data in RAM or in a memory-mapped file
The data type or dtype, describing fixed-size value cells in the array
A tuple indicating the array’s shape
A tuple of strides, integers indicating the number of bytes to “step” in order to advance one element along a dimension
See Figure A-1 for a simple mockup of the ndarray innards.
For example, a 10 × 5 array would have shape