This page describes characteristics of numpy that are by design but may be surprising to some users.

# assigment creates a view, not a copy

This is actually standard Python, but is repeated here because it is often a source of confusion for new users. The following snippet illustrates the correct behavior.

>>> a=numpy.arange(10) >>> print a [0 1 2 3 4 5 6 7 8 9] >>> b=a # creates a second reference to the same memory >>> print b [0 1 2 3 4 5 6 7 8 9] >>> c=numpy.array(a,copy=True) # copies the memory >>> print c [0 1 2 3 4 5 6 7 8 9] >>> a[3]=1234 >>> print a [ 0 1 2 1234 4 5 6 7 8 9] >>> print b [ 0 1 2 1234 4 5 6 7 8 9] >>> print c [0 1 2 3 4 5 6 7 8 9]

# allclose() does not ensure shape similarity

Like most of numpy, allclose() uses the broadcasting rules when performing its operation. This leads to the following behavior:

>>> a=32 >>> b=numpy.array([]) >>> numpy.allclose(a,b) True

Upon closer inspection, we can see that the broadcasting rules cause `a` to become an empty array like `b`. The default truth value of an empty array is True, so the following holds and illustrates how the above result is consistent with numpy's rules.

>>> a==b array([], dtype=bool) >>> numpy.all(a==b) True

See this thread for further information.