Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 如何在numpy中使用多维索引访问值?_Python_Arrays_Numpy - Fatal编程技术网

Python 如何在numpy中使用多维索引访问值?

Python 如何在numpy中使用多维索引访问值?,python,arrays,numpy,Python,Arrays,Numpy,我在访问给定索引中的值时遇到问题: indices = array([[[1, 1], [1, 2], [1, 3], [2, 1], [2, 2], [2, 3], [3, 1], [3, 2], [3, 3]], [[1, 2], [1, 3], [1, 4], [2, 2], [2,

我在访问给定索引中的值时遇到问题:

indices = array([[[1, 1],
        [1, 2],
        [1, 3],
        [2, 1],
        [2, 2],
        [2, 3],
        [3, 1],
        [3, 2],
        [3, 3]],

       [[1, 2],
        [1, 3],
        [1, 4],
        [2, 2],
        [2, 3],
        [2, 4],
        [3, 2],
        [3, 3],
        [3, 4]],

       [[2, 1],
        [2, 2],
        [2, 3],
        [3, 1],
        [3, 2],
        [3, 3],
        [4, 1],
        [4, 2],
        [4, 3]],

       [[2, 2],
        [2, 3],
        [2, 4],
        [3, 2],
        [3, 3],
        [3, 4],
        [4, 2],
        [4, 3],
        [4, 4]]])
对于阵列:

padded_x = array([[0, 0, 0, 0],
       [0, 1, 1, 0],
       [0, 1, 1, 0],
       [0, 0, 0, 0]])
我尝试使用
result=padded_x[index]
访问,但它返回的结果是shape
(4,9,2,4)
,我需要它在shape
(4,9)
中。我不想使用for循环,因为我处理的是非常大的数组


上下文:索引表示点
[i,j]
处的3x3邻域索引。为了防止越界数组访问,原始数组已被填充(因此名称为
padded_x

Numpy在要访问多个多维索引时有一些奇怪的索引规则

您必须为每个维度提供一个包含iterable的元组。 因此,当您想要访问
padded_x
(0,0)
(2,3)
时,您必须编写
padded_x[([0,2],[0,3])

以你为例,它应该是

indices = (
    [[-1, -1, -1, 0, 0, 0, 1, 1, 1],
     [-1, -1, -1, 0, 0, 0, 1, 1, 1],
     [0, 0, 0, 1, 1, 1, 2, 2, 2],
     [0, 0, 0, 1, 1, 1, 2, 2, 2]],
    [[-1, 0, 1, -1, 0, 1, -1, 0, 1],
     [0, 1, 2, 0, 1, 2, 0, 1, 2],
     [-1, 0, 1, -1, 0, 1, -1, 0, 1],
     [0, 1, 2, 0, 1, 2, 0, 1, 2]]
)

padded_x = np.array([[0, 0, 0, 0],
                     [0, 1, 1, 0],
                     [0, 1, 1, 0],
                     [0, 0, 0, 0]])

result = padded_x[indices]
请注意,可以通过转置从您尝试的索引创建工作索引数组:
index=tuple(index.transpose((2,0,1))


它必须是一个元组,numpy才能将其视为多维索引!否则它将被视为1D索引的列表。

不幸的是,列表中的第一个代码块缺少逗号,因此我们无法创建
索引
@gofvonx我刚刚添加了逗号,所以
索引
是(4,9,2),您希望
索引[:,:,0]
为第一个维度编制索引,并且
索引[:,:,:,1]
对于第二个问题?显然不需要重塑,您可以将索引列表的形状保留在元组中,因此我删除了答案的这一部分。