【问题标题】:Looping through each item in a numpy array?循环遍历numpy数组中的每个项目?
【发布时间】:2016-11-17 19:59:51
【问题描述】:

我正在尝试访问 numpy 二维数组中的每个项目。

我在 Python [[...], [...], [...]] 中已经习惯了这样的事情

for row in data:
    for col in data:
       print(data[row][col])

但是现在,我有一个data_array = np.array(features)

我怎样才能以同样的方式遍历它?

【问题讨论】:

  • 我们需要更多细节才能提供帮助。
  • 基本 numpy 文档中没有介绍吗?
  • 你可以用同样的方式遍历它。试试看!但是,遍历 2D 数组完全违背了使用 numpy 的意义,即高效的数组操作。例如,阅读this doc page
  • 请注意,您当前的语法不正确,即使是遍历嵌套列表也是如此。你应该使用for row in data: for elem in row: print(elem)。这适用于嵌套列表和二维数组

标签: numpy multidimensional-array


【解决方案1】:

试试np.ndenumerate:

>>> a =numpy.array([[1,2],[3,4]])
>>> for (i,j), value in np.ndenumerate(a):
...  print(i, j, value)
... 
0 0 1
0 1 2 
1 0 3
1 1 4

【讨论】:

    【解决方案2】:

    制作一个小的二维数组和一个嵌套列表:

    In [241]: A=np.arange(6).reshape(2,3)
    In [242]: alist= A.tolist()
    In [243]: alist
    Out[243]: [[0, 1, 2], [3, 4, 5]]
    

    一种迭代列表的方式:

    In [244]: for row in alist:
         ...:     for item in row:
         ...:         print(item)
         ...:         
    0
    1
    2
    3
    4
    5
    

    同样适用于数组

    In [245]: for row in A:
         ...:     for item in row:
         ...:         print(item)
         ...:         
    0
    1
    2
    3
    4
    5
    

    如果你想修改元素,现在两者都不是很好。但是对于所有元素的粗略迭代,这是可行的。

    有了这个数组,我可以很容易地把它当作 1d

    In [246]: [i for i in A.flat]
    Out[246]: [0, 1, 2, 3, 4, 5]
    

    我也可以使用嵌套索引进行迭代

    In [247]: [A[i,j] for i in range(A.shape[0]) for j in range(A.shape[1])]
    Out[247]: [0, 1, 2, 3, 4, 5]
    

    一般来说,最好使用没有迭代的数组。我给出这些迭代示例是为了消除一些混淆。

    【讨论】:

      【解决方案3】:

      如果你想访问一个 numpy 二维数组特征中的项目,你可以使用 features[row_index, column_index]。如果你想遍历一个 numpy 数组,你可以将你的脚本修改为

      for row in data:
      
          for col in data:
      
             print(data[row, col])
      

      【讨论】:

      • 没有。如果你像这样迭代,row 是一个一维数组。您可以将其用作data 的索引。第二次迭代也是一样的。你可能想到了for item in row:
      • 您需要的是for row in data.shape[0]for col in data.shape[1],或者for row in data: for col in row: print(col)
      • 是的,你是对的,我忘了像 Praveen 那样更改 for 循环以使用行数和列数。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-14
      • 1970-01-01
      • 1970-01-01
      • 2020-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多