Understanding the internals of NumPy to avoid unnecessary array copying
We can achieve significant performance speedups with NumPy over native Python code, particularly when our computations follow the Single Instruction, Multiple Data (SIMD) paradigm. However, it is also possible to unintentionally write non-optimized code with NumPy.
In the next few recipes, we will see some tricks that can help us write optimized NumPy code. In this recipe, we will see how to avoid unnecessary array copies in order to save memory. In that respect, we will need to dig into the internals of NumPy.
Getting ready
First, we need a way to check whether two arrays share the same underlying data buffer in memory. Let's define a function id()
that returns the memory location of the underlying data buffer:
def id(x): # This function returns the memory # block address of an array. return x.__array_interface__['data'][0]
Two arrays with the same data location (as returned by id
) share the same underlying data...