【问题标题】:How to iterate over a numpy array, getting two values per loop?如何迭代一个 numpy 数组,每个循环获取两个值?
【发布时间】:2023-01-14 21:31:43
【问题描述】:

我设想类似的东西

import numpy as np
x = np.arange(10)
for i, j in x:
     print(i,j)

得到类似的东西

0 1
2 3
4 5
6 7
8 9

但我得到了这个追溯:

Traceback (most recent call last):
  File "/home/andreas/.local/share/JetBrains/Toolbox/apps/PyCharm-P/ch-0/223.8214.51/plugins/python/helpers/pydev/pydevconsole.py", line 364, in runcode
    coro = func()
  File "<input>", line 1, in <module>
TypeError: cannot unpack non-iterable numpy.int64 object

我还尝试将 np.nditer(x) 和 itertools 与 zip(x[::2], x[1::2]) 一起使用,但这也不起作用,并出现不同的错误消息。

这应该超级简单,但我无法在网上找到解决方案。

【问题讨论】:

  • 迭代的目的是什么?可能有更有效的(numpy-esque)方法。

标签: python numpy loops


【解决方案1】:

您试图将 0 放入 i 和 j 中,这是不可能的。 要实现该结果,您必须使用x = x.reshape((5,2)) 或x.shape = 5, 2 重塑您的 numpy 数组。然后你可以像这样解压它。

为了形象化,这就是您当前的代码正在做的事情:

i, j = 0
...
i, j = 1
...

如果你重塑它,这就是会发生的事情:

i, j = [0, 1]
...
i, j = [2, 3]
...

【讨论】:

    【解决方案2】:
    import numpy as np
    x = np.arange(10)
    c=0  #counter to print even occurence
    for i in range(len(x)-1):
        c+=1
        if c%2!=0:
            print(x[i],x[i+1])
    
    #output
    0 1
    2 3
    4 5
    6 7
    8 9
    

    只是为了让您理解,如果我不放置计数器并尝试打印一个元素和下一个元素,我将得到重复的值,例如:

    import numpy as np
    x = np.arange(10)
    for i in range(len(x)-1):
        print(x[i],x[i+1])
    
    #output
    0 1
    1 2
    2 3
    3 4
    4 5
    5 6
    6 7
    7 8
    8 9
    

    【讨论】:

      猜你喜欢
      • 2016-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-20
      • 2015-11-13
      • 2018-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多