【问题标题】:converty numpy array of arrays to 2d array将数组的numpy数组转换为二维数组
【发布时间】:2018-11-30 22:32:15
【问题描述】:

我有一个熊猫系列 features 具有以下值 (features.values)

array([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]),
       array([0, 0, 0, ..., 0, 0, 0])], dtype=object)

现在我真的希望它被识别为矩阵,但如果我这样做了

>>> features.values.shape
(10000,)

而不是(10000, 3000),这是我所期望的。

我怎样才能让它被识别为 2d 而不是以数组为值的 1d 数组。还有为什么它不会自动将其检测为二维数组?

【问题讨论】:

  • 试试np.stack(features)。它将数组视为数组列表,并将它们连接到新轴上。 np.vstack(features) 在这种情况下也可以使用。这是假设所有内部数组都具有相同的形状。
  • @anishtain4,您的链接适用于 pandas 数据框,而不是 numpy 数组。
  • @hpaulj "我有一个熊猫系列"
  • @hpaulj np.stack 效果很好。只是真的不明白为什么features.values 不这样返回它,或者为什么 numpy 不将它识别为二维数组。谢谢!

标签: python pandas numpy multidimensional-array


【解决方案1】:

针对您的评论问题,让我们比较两种创建数组的方式

首先从数组列表中创建一个数组(长度相同):

In [302]: arr = np.array([np.arange(3), np.arange(1,4), np.arange(10,13)])
In [303]: arr
Out[303]: 
array([[ 0,  1,  2],
       [ 1,  2,  3],
       [10, 11, 12]])

结果是一个二维数字数组。

如果我们创建一个对象 dtype 数组,并用数组填充它:

In [304]: arr = np.empty(3,object)
In [305]: arr[:] = [np.arange(3), np.arange(1,4), np.arange(10,13)]
In [306]: arr
Out[306]: 
array([array([0, 1, 2]), array([1, 2, 3]), array([10, 11, 12])],
      dtype=object)

请注意,此显示器与您的显示器相似。这是,通过设计一个一维数组。像列表一样,它包含指向内存中其他地方的数组的指针。请注意,它需要一个额外的构造步骤。 np.array 的默认行为是尽可能创建一个多维数组。

要解决这个问题需要额外的努力。同样,要撤消它需要一些额外的努力 - 创建 2d 数值数组。

只需在其上调用np.array 不会改变结构。

In [307]: np.array(arr)
Out[307]: 
array([array([0, 1, 2]), array([1, 2, 3]), array([10, 11, 12])],
      dtype=object)

stack 确实将其更改为 2d。 stack 将其视为数组列表,并在新轴上连接。

In [308]: np.stack(arr)
Out[308]: 
array([[ 0,  1,  2],
       [ 1,  2,  3],
       [10, 11, 12]])

【讨论】:

    【解决方案2】:

    缩短@hpauli 答案:

    your_2d_arry = np.stack(arr_of_arr_object)
    

    【讨论】:

      猜你喜欢
      • 2020-04-14
      • 2023-02-03
      • 2012-09-16
      • 1970-01-01
      • 1970-01-01
      • 2016-02-18
      • 2018-02-19
      相关资源
      最近更新 更多