|
Using "fancy" indices like this does result in a copy because it can't be represented as a simple slice of the original matrix. A good explaination is here (it's from 2008 but still true): https://scipy-cookbook.readthedocs.io/items/ViewsVsCopies.ht... You can verify there's a copy by changing the new array after putting the result in a new variable (see above link for why this makes a difference) and verifying the old one is unchanged: >>> import numpy as np
>>> x = np.array([1, 2, 3])
>>> y = x[[0, 2, 1]]
>>> y[0] = 3
>>> y
array([3, 3, 2])
>>> x
array([1, 2, 3])
Edit:But a view can be based on a slice that includes a skip parameter, and in fact you even slice in multiple dimensions and it will still be a view. That is worth discussing in the article: >>> x = np.array([np.arange(7), np.arange(7)+1]*3)
>>> y = x[4:1:-2, 1:5:2]
>>> y
array([[1, 3],
[1, 3]])
>>> y[0,0] = 99
>>> x
array([[ 0, 1, 2, 3, 4, 5, 6],
[ 1, 2, 3, 4, 5, 6, 7],
[ 0, 1, 2, 3, 4, 5, 6],
[ 1, 2, 3, 4, 5, 6, 7],
[ 0, 99, 2, 3, 4, 5, 6],
[ 1, 2, 3, 4, 5, 6, 7]])
|