使用多维数组调用2D数组元素

时间:2018-01-09 09:48:49

标签: python list matrix 2d elements

我在Python中使用了一个函数,它返回矩阵中周围元素的位置,如下所示:

import numpy as np
neighbours(1,0,len(im2),len(im2),size=4)

返回的内容如下:

>>> [(0, 0), (2, 0), (1, 1)]

但是当我想从矩阵本身调用实际值时,我得到一个错误。例如:

matrix[neighbours(1,0,len(im2),len(im2),size=4)]
IndexError: too many indices for array

这显然是因为我传递给矩阵的列表,但如果我将其更改为数组,我会得到一个垂直数组:

np.array(neighbours(1,0,len(im2),len(im2),size=4))
array([[0, 0],
       [2, 0],
       [1, 1]])

传递给矩阵时,它不会给出3个值:

matrix[np.array(neighbours(1,0,len(im2),len(im2),size=4))]

array([[[ 1.,  1.,  1., ...,  1.,  1., -1.],
        [ 1.,  1.,  1., ...,  1.,  1., -1.]],

       [[ 1.,  1.,  1., ...,  1.,  1.,  1.],
        [ 1.,  1.,  1., ...,  1.,  1., -1.]],

       [[ 1.,  1.,  1., ...,  1.,  1., -1.],
        [ 1.,  1.,  1., ...,  1.,  1., -1.]]])

任何有关修复此问题的帮助都会很棒!我真的试图避免使用循环来顺序调用值,因为它会大大减慢我的代码速度。

2 个答案:

答案 0 :(得分:1)

高级索引arrays.indexing似乎在单独的元组或数组中使用rows,cols索引

ni = [(0, 0), (2, 0), (1, 1)]

ary = np.arange(12).reshape(3,4)

ary

array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

rows, cols = zip(*ni)  # list "transpose" with zip, unpacked to rows, cols

ary[rows, cols]

array([0, 8, 5])

答案 1 :(得分:0)

当然它会引发错误。您正尝试使用此方法访问矩阵的元素。即方括号

  

矩阵[邻居(1,0,LEN(IM2),LEN(IM2),大小= 4)]

使用下面给出的普通括号。

import numpy as np
a = [(0, 0), (2, 0), (1, 1)]
m = np.matrix(a)
print(m)