【问题标题】:How can I get the index of an element from a loop, sourced from a numpy array?如何从来自 numpy 数组的循环中获取元素的索引?
【发布时间】:2020-06-30 02:29:26
【问题描述】:

我有一个矩阵(如下所示),我使用以下代码循环遍历矩阵的元素。

for column in m:
    for elem in column:
        ...

如何获取矩阵中elem 的索引?我听说过np.where(),但我没有使用它,因为它返回列表的方式,我必须获取列表中元素的索引才能获取矩阵中元素的索引.是否有替代方案来获取矩阵中elem 的索引,例如.index() 用于列表?

示例矩阵:

[[0 0 0 0 0 0 0 0 0]
 [0 1 2 1 1 2 2 1 0]
 [0 1 0 2 2 0 2 0 0]
 [0 2 0 2 1 1 0 2 0]
 [0 2 2 2 2 0 1 2 0]
 [0 1 1 2 1 0 0 1 0]
 [0 2 2 1 1 1 2 1 0]
 [0 1 2 0 0 2 2 0 0]
 [0 0 0 0 0 0 0 0 0]]

【问题讨论】:

  • 您是否阅读过关于在迭代时使用enumerate 的内容? (基础 Python)。
  • 数组形状的范围?
  • @hpaulj 我已经阅读了有关使用enumerate 的信息,但是它如何使用它呢?会不会是for i, value in enumerate(column): 之类的东西? i 在这里会是什么样子?
  • 为什么不自己跟踪索引呢?由于您不确定如何使用枚举。
  • @lionrocker221 你为什么不试试看我长什么样?文档很清楚,如果打印出来很容易查看

标签: python arrays numpy matrix


【解决方案1】:

如果您枚举行和列,您将获得索引。如果您只想要这些元素,您已经在elem 中拥有它们。例如:

m = np.array([
 [0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 1, 2, 1, 1, 2, 2, 1, 0],
 [0, 1, 0, 2, 2, 0, 2, 0, 0],
 [0, 2, 0, 2, 1, 1, 0, 2, 0],
 [0, 2, 2, 2, 2, 0, 1, 2, 0],
 [0, 1, 1, 2, 1, 0, 0, 1, 0],
 [0, 2, 2, 1, 1, 1, 2, 1, 0],
 [0, 1, 2, 0, 0, 2, 2, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0]])

for i_row, row in enumerate(m):
    for i_col, elem in enumerate(row):
        # here m[i_row][i_col] == elem
        print(i_row, i_col)

打印:

0 0
0 1
0 2
0 3
0 4
0 5
0 6
etc..

【讨论】:

    【解决方案2】:

    来自 OP 对帖子的评论:

    from skimage.util.shape import view_as_windows
    print(view_as_windows(a, (3,3)))
    

    输出:

    [[[[0 0 0]
       [0 1 2]
       [0 1 0]]
    
      [[0 0 0]
       [1 2 1]
       [1 0 2]]
    
      [[0 0 0]
       [2 1 1]
       [0 2 2]]
    
      [[0 0 0]
       [1 1 2]
       [2 2 0]]
    
      [[0 0 0]
       [1 2 2]
       [2 0 2]]
      ...
    

    【讨论】:

    • @lionrocker221 请参阅我帖子中的编辑。如果这不是您要找的,一个简单的输入/输出示例会有所帮助。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 2015-11-18
    • 1970-01-01
    相关资源
    最近更新 更多