【问题标题】:numpy.ndarray.tolist get list like generator instead of actual list?numpy.ndarray.tolist 像生成器一样获取列表而不是实际列表?
【发布时间】:2021-09-22 16:39:19
【问题描述】:

我想获取生成器对象而不是 numpy 数组的列表。

for item in numpy.ndarray.tolist():
  item.do_something_with

【问题讨论】:

  • numpy.ndarray.tolist 是一个糟糕的表达方式。 numpy.ndarray 是一个函数,而不是一个数组。但是忽略这个细节,这个迭代可能比for item in arr: 更好,因为tolist 非常快,并且列表上的迭代比数组上的迭代更快。

标签: python pandas numpy numpy-ndarray


【解决方案1】:

我没有看到任何好处,因为您的数组已经是可迭代的并且首先在内存中,但是如果您绝对需要一个生成器,您可以这样做:

arr = np.random.randn(10)
for item in (item for item in arr):
    ...

也就是说,直接遍历数组会更好:

for item in arr:
    ...

【讨论】:

  • 数组本身已经是可迭代的。为什么要在顶部创建多余的生成器?
【解决方案2】:

你可以直接遍历numpy数组

array = np.random.random(3,3,3) # 3d array

for a in array:
    do_something(a)  # a is a 2d array
    do_something_as_list(a.tolist())
    for a1 in a:  # iterate again
        ...  # a1 is a 1d array 
        # etc

您可以像这样遍历数组中的每个缩放器元素

for e in array.flat:
    do_something(e)  # e is a scaler

如果您需要传递迭代器(您可能指的是生成器),您可以使用iter(array) 检索它。

【讨论】:

  • numpy.flatiter 对象不可调用
  • @MustafaAydın 已修复,这是一个属性
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-06
  • 2018-11-18
  • 2011-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
相关资源
最近更新 更多