Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 变维数索引数组_Python_Numpy_Multidimensional Array_Indexing - Fatal编程技术网

Python 变维数索引数组

Python 变维数索引数组,python,numpy,multidimensional-array,indexing,Python,Numpy,Multidimensional Array,Indexing,我有一个numpy ndarray的实例,但大小不一 import numpy as np dimensions = (4, 4, 4) myarray = np.zeros(shape = dimensions) 在这种情况下,我得到了一个立方体形状的数组,如果我想索引myarray的一个切片,我可以使用myarray[:][:][0],因为我知道有3个维度,我使用3对[] 对于4维,我将使用myarray[:][:][:][:][0]。但是由于维度的数量可能会改变,我不能用这种方式硬编码

我有一个numpy ndarray的实例,但大小不一

import numpy as np
dimensions = (4, 4, 4)
myarray = np.zeros(shape = dimensions)
在这种情况下,我得到了一个立方体形状的数组,如果我想索引myarray的一个切片,我可以使用myarray[:][:][0],因为我知道有3个维度,我使用3对[]

对于4维,我将使用myarray[:][:][:][:][0]。但是由于维度的数量可能会改变,我不能用这种方式硬编码

如何根据维度的数量对这样一个数组的切片进行索引?这似乎是一个简单的问题,但无法想出任何解决方案。

您可以使用:

import numpy as np
dimensions = (4, 4, 4)
myarray = np.zeros(shape = dimensions)

print myarray[..., 0]
它将获取最后一个索引的第一项。

您使用一个括号集(而不是多个括号集)为myarray编制索引:

myarray[:,:,:,i]
myarray[:,2,:,:]
myarray[...,3]
myarray[...,3,:]
一:对于你想要的所有维度。。。表示多个:-前提是numpy可以清楚地识别号码

尾随:可以省略,当然使用….时除外

take可以用同样的方式使用;它接受一个轴参数:

np.take(myarray, i, axis=3)
您还可以将索引构造为元组,例如

ind = [slice(None)]*4
ind[2] = 3
myarray[tuple(ind)]
# same as myarray[:,:,3,:]
# myarray.take(3, axis=2)
np.apply_沿_轴执行这种类型的索引

e、 g


当您编写myarray[:][:][0]时,您实际上是指myarray[:,:,0]?前者正好等于myarray[0],后者则不然。假设你是指后者,那么问题是如果我要调用第I个而不是最后一个索引,该怎么办?如果你不知道数组的形状,你就不知道要获取哪一项。你不能得到一个通用的索引;它接受一个轴参数。
In [274]: myarray=np.ones((2,3,4,5))

In [275]: myarray[:,:,3,:].shape
Out[275]: (2, 3, 5)

In [276]: myarray.take(3,axis=2).shape
Out[276]: (2, 3, 5)

In [277]: ind=[slice(None)]*4; ind[2]=3

In [278]: ind
Out[278]: [slice(None, None, None), slice(None, None, None), 3, slice(None, None, None)]

In [279]: myarray[tuple(ind)].shape
Out[279]: (2, 3, 5)