![](/img/trans.png)
[英]Different behaviour of indexing and slicing in numpy structured arrays
[英]numpy slicing and indexing different results
在通过任何切片,掩蔽或花式索引操作获得的numpy子数组中,只是对原始数组的视图,可以如下所示:
$ python3
Python 3.5.2 (default, Nov 23 2017, 16:37:01)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> np.__version__
'1.11.0'
>>> a = np.arange(3); a[:2] = 111; a
array([111, 111, 2])
>>> a = np.arange(3); a[a<2] = 111; a
array([111, 111, 2])
>>> a = np.arange(3); a[[0,1]] = 111; a
array([111, 111, 2])
在上面的例子中,整个子阵列被分配给。 但是,如果我们分配给子数组的一个元素,则切片操作的结果仍然表现为视图,而屏蔽和花式索引操作的结果表现为独立副本:
>>> a = np.arange(3); a[:2][0] = 111; a
array([111, 1, 2])
>>> a = np.arange(3); a[a<2][0] = 111; a
array([0, 1, 2])
>>> a = np.arange(3); a[[0,1]][0] = 111; a
array([0, 1, 2])
这是一个numpy的错误,还是设计? 如果是设计,那么这种不一致的证据是什么?
这不是一个错误。 只要将切片对象传递给Numpy数组,返回的子数组就是原始项的视图,这意味着即使切片分配或单项分配也会更改原始数组。 但在其他情况下,返回的结果不是视图。 实际上,它是所选切片的浅视图(副本),它仅支持切片分配,就像Python支持的其他可变对象一样。
文档中也提到了它:
[...]与索引数组一样,返回的是数据的副本,而不是切片所获得的视图。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.