【问题标题】:how to run a for loop over numbers stored as a numpy array in a list in Python如何对存储为 Python 列表中的 numpy 数组的数字运行 for 循环
【发布时间】:2021-06-04 07:30:45
【问题描述】:

我有一个 for 循环,在最简单的情况下有两次迭代。迭代次数是固定的。然后我想例如打印作为数组存储在列表中的数字。这是我的清单:

data = [np.array([450., 451., 452., 445.]),
        np.array([10., 20., 30.])

我的列表有两个数组,我想在迭代中打印每个数组。我试过了:

for i in range(2): # the number of iterations is fixed beforehand
    for j in range(len(data[i]) - 1):
        print(data[j], data[j + 1])

我只是通过for i in range (2) 编写了第一个 for 循环,但实际上迭代是自动进行的,我没有定义它们,但存储在我的列表中的数组数量与迭代次数完全匹配。

在我的第一次迭代中,我想打印存储在第一个数组中的数字对:

450., 451.
451., 452.
452., 445.

在第二次迭代中,我想打印存储在第二个数组中的数字:

10., 20.
20., 30.

【问题讨论】:

  • 如果range(2) 中的idata[j],当j > 1 时应该是什么?使用data[i][j] 之类的东西,尽管这样的东西根本不需要使用索引。您可以直接迭代列表和数组。
  • 亲爱的@John Coleman,我想先打印第一个数据数组中的数字,然后再打印第二个数组。我想也许这就是这样做的方法。
  • @John Coleman,在每个阵列中,我从第一个阵列开始打印到下一个阵列。例如 10 和下一个是 20。和 20 和它的下一个是 30。在第一个数组中也重复 451 和 452。

标签: python arrays list numpy for-loop


【解决方案1】:

您不需要固定的迭代。外循环应该是

for arr in data:

可能最简单的遍历数组的方法是

    for i in range(len(arr) - 1):
        print(arr[i:i+2])

请注意,在原始循环中,您打印的是data[j]data[j + 1],而不是data[i][j]data[i][j + 1]。我的建议是直接遍历列表而不是使用索引,所以 arr 替换 data[i]

您可以作弊并创建一个正是您想要的数组元素的视图,而不是循环:

    view = np.lib.stride_tricks.as_strided(arr, shape=(arr.size - 1, 2), strides=arr.strides * 2)
    print(view)

【讨论】:

  • 亲爱的@Mad Physicist,我非常感谢您的解决方案。但是,关键是我没有创建第一个循环。我有一个大脚本,它运行了几次迭代。在脚本中间和第一次迭代中,我正在创建列表。然后,我需要在正确的循环中使用每个数组。例如,第一个循环中的第一个,第二个循环中的第二个数组等等。您提供的解决方案并没有完全符合我的预期。抱歉我的帖子不清楚。
  • @Ali_d。我认为我的更新应该解决这个问题。使用data[i][j] 而不是data[j]。另外,我刚刚修正了一个错字。
  • @Mad Physicist,很抱歉占用您的时间,但我在运行您的代码时只看到以下内容:[450.] [451.] [452.] [10.] [20.] [30.]
  • @Ali_d。为抓。另一个错字。固定i+1->i+2
  • @Mad Physicist,感谢您花时间解决我的问题,但我仍然遇到迭代问题。目前,每一行都作为迭代打印,但我希望第一次迭代中的前三行 a dn 最后两行在另一个中。问题是这个数组是在第一次迭代中创建的,但我需要稍后使用它#s 数组。
猜你喜欢
  • 2017-03-16
  • 2016-07-31
  • 2018-05-29
  • 1970-01-01
  • 2019-03-01
  • 1970-01-01
  • 2020-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多