【问题标题】:Numpy: Find the maximum length of arrays inside another arrayNumpy:在另一个数组中查找数组的最大长度
【发布时间】:2020-09-03 08:39:11
【问题描述】:

我有一个如下的 numpy 数组:

import numpy as np
arr = np.array([np.array([1]),np.array([1,2]),np.array([1,2,3]),np.array([1,3,4,2,4,2])])

我想要一个不错的 numpy 函数,它为我提供了我的 arr 数组中数组的最大长度。 所以我需要一个 numpy 函数,它在这个例子中返回 6.

这可以通过迭代实现,但我正在寻找更好的方法,甚至可能没有map()

tensorflow 或 keras 中的任何函数都可以使用。

谢谢

【问题讨论】:

  • 你的“数组”不是一个数组,它是一个 Python list,并且该特定列表无法以任何直接的方式转换为 numpy 数组(不规则维度)。
  • max(len(a) for a in arr)?另外,arr 不能是 numpy 数组,只能使用 dtype=object
  • 我这边出错,我忘记了 np.array 构造函数,我刚刚更新了我的帖子
  • 将其全部转换为np.arrays 有哪些优势?我没有看到。
  • @MichaelJanz:答案是错误的。它计算了元素的总和。应用于arr = [[9999],[2,2,2,2,2],[1,1]],它会返回1

标签: python numpy


【解决方案1】:

我们可以这样做:

max(map(len, arr))
#6

【讨论】:

  • OP:“这可以通过迭代实现,但我正在寻找更好的方法,甚至可能没有 map()”
  • 我认为我们必须使用map 或在此处循环
  • 同意。但是 OP 可能想知道是否存在加速实现。可能是具有低级语言访问或 GPU 支持的 API
  • 由于没有其他答案,我会认为这是最好的答案
【解决方案2】:

另一个简单的技巧是使用带有 key 参数的 max() 函数来返回最大长度的数组。

len(max(arr, key = len))

【讨论】:

    【解决方案3】:

    另一种方法是使用keras.preprocessing.sequence.pad_sequences() 函数。

    它将序列填充到最大长度,但在我看来,它会产生很高的内存使用率,并且可能需要一些时间,具体取决于数组。但是,这将是一种不循环的方式:

    len(keras.preprocessing.sequence.pad_sequences(arr)[0])
    

    【讨论】:

    • 我希望这比简单的数组循环要慢得多。
    • 正如我在回答中所说的,是的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    • 1970-01-01
    • 2023-01-25
    • 1970-01-01
    相关资源
    最近更新 更多