【问题标题】:Calling 2D array elements with multi dimensional array用多维数组调用二维数组元素
【发布时间】:2018-01-09 09:48:49
【问题描述】:

我在 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.]]])

任何解决此问题的帮助都会很棒!我真的试图避免使用循环来顺序调用这些值,因为它会大大降低我的代码速度。

【问题讨论】:

    标签: python list matrix 2d elements


    【解决方案1】:

    高级索引arrays.indexing 似乎在单独的元组或数组中使用行、列索引

    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])
    

    【讨论】:

      【解决方案2】:

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

      矩阵[neighbours(1,0,len(im2),len(im2),size=4)]

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

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

      【讨论】:

      • 当我这样做时,我得到这个错误:TypeError: 'numpy.ndarray' object is not callable
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-09
      • 1970-01-01
      • 2019-01-15
      • 1970-01-01
      • 2021-07-10
      • 2017-11-26
      • 1970-01-01
      相关资源
      最近更新 更多