【问题标题】:Unnesting Numpy Arrays取消嵌套 Numpy 数组
【发布时间】:2014-09-24 13:34:11
【问题描述】:

我有一个 pandas 系列,每个条目都有一个 numpy 数组(所有条目的长度相同),我想将其转换为 2D numpy 数组。我相信我已经读过 Series 和 DataFrames 在持有容器时表现不佳,但长话短说,不幸的是,这就是你在系列中的每个组上调用 np.histogram(.,.)[0] 得到的结果,这就是我所追求的(a直方图的分布)。

无论哪种方式,我都想从我的系列中检索一个 2D numpy 数组。目前,如果我这样做 my_series.values() 我会得到这个:

array([array([0, 0, 0, ..., 1, 0, 0]), array([0, 0, 0, ..., 0, 0, 0]),
       array([0, 0, 0, ..., 0, 0, 0]), ..., array([0, 0, 0, ..., 0, 0, 0]),
       array([0, 0, 0, ..., 0, 0, 0]), array([0, 0, 0, ..., 0, 0, 0])], dtype=object)

this thread 中的解决方案在这里不起作用(np.array 没有自动将最终数据结构解析为二维数组)。

如何从这个数据结构中“展平”这个二维数组? (注意:result.flatten() 没有效果,np.array(result) 也没有,都返回原始结构)

【问题讨论】:

  • 所有子数组的形状都一样?

标签: python arrays numpy pandas


【解决方案1】:

使用np.vstack 堆叠列表/数组/任何行:

>>> A = np.empty(2, dtype=object)
>>> A[0] = array([0, 0, 0])
>>> A[1] = array([1, 2, 3])
>>> A
array([array([0, 0, 0]), array([1, 2, 3])], dtype=object)
>>> np.vstack(A)
array([[0, 0, 0],
       [1, 2, 3]])

【讨论】:

  • 令人惊讶的是,@behzad.nouri 的已删除解决方案比我在 NumPy 1.8.2 中的 np.arange(10) 的长度为 2000 的数组更快。 Behzad,如果你取消删除,我会投赞成票。 (不过,如果内部数组更大,我的解决方案会胜出。)
  • 未删除,但我认为np.vstack 更干净
【解决方案2】:

可能:

>>> xs
array([array([1, 2, 3]), array([4, 5, 6])], dtype=object)
>>> xs.shape
(2,)
>>> np.array(xs.tolist())  # or, np.asarray(xs.tolist())
array([[1, 2, 3],
       [4, 5, 6]])
>>> np.array(xs.tolist()).shape
(2, 3)

【讨论】:

    猜你喜欢
    • 2015-03-14
    • 2013-05-05
    • 2021-12-05
    • 2015-05-08
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 2022-01-13
    相关资源
    最近更新 更多