Evg*_*tov 3 python numpy slice multidimensional-array
我有一个三维数组.当我采用它的2-D切片时,结果取决于它是用列表索引还是用切片索引.在第一种情况下,结果是转置的.没有在手册中找到此行为.
>>> import numpy as np
>>> x = np.array([[[1,1,1],[2,2,2]], [[3,3,3],[4,4,4]]])
>>> x
array([[[1, 1, 1],
[2, 2, 2]],
[[3, 3, 3],
[4, 4, 4]]])
>>> x[0,:,[0,1]]
array([[1, 2],
[1, 2]])
>>> x[0,:,slice(2)]
array([[1, 1],
[2, 2]])
>>>
Run Code Online (Sandbox Code Playgroud)
任何人都可以指出这个理由吗?
结合高级和基本索引
当至少有一个slice(:),省略号(...)或np.newaxis索引(或者数组的维度多于高级索引)时,行为可能会更复杂.这就像连接每个高级索引元素的索引结果一样在最简单的情况下,只有一个高级索引.单个高级索引可以例如替换切片,并且结果数组将是相同的,但是,它是副本并且可以具有不同的存储器布局.当可能时,切片是优选的.
注意我上面加粗的两个部分.
特别是在这种结构中:
>>> x[0,:,[0,1]]
array([[1, 2],
[1, 2]])
Run Code Online (Sandbox Code Playgroud)
在索引中至少有一次"slice,ellipsisi或np.newaxis"的情况下,行为就像连接每个高级索引元素的索引结果一样.所以:
>>> x[0,:,[0]]
array([[1, 2]])
>>> x[0,:,[1]]
array([[1, 2]])
>>> np.concatenate((x[0,:,[0]], x[0,:,[1]]))
array([[1, 2],
[1, 2]])
Run Code Online (Sandbox Code Playgroud)
但是,这种结构就像一个简单的例子:只有一个高级索引,所以它就像一个切片:
>>> x[0,:,slice(2)]
array([[1, 1],
[2, 2]])
>>> x[slice(0,1),:,slice(2)]
array([[[1, 1],
[2, 2]]])
Run Code Online (Sandbox Code Playgroud)
虽然注意,后者实际上是三维的,因为索引的第一部分充当切片,它是3个切片,所以三个维度.
| 归档时间: |
|
| 查看次数: |
502 次 |
| 最近记录: |