将numpy数组转换为2d数组

2024-05-23 21:52:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pandas系列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)

我如何才能将其识别为二维数组,而不是以数组作为值的一维数组。另外,为什么它不自动检测它作为一个二维阵列?


Tags: pandasobject矩阵数组arrayfeatures自动检测values
1条回答
网友
1楼 · 发布于 2024-05-23 21:52:18

在回答您的评论问题时,让我们比较两种创建数组的方法

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

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]])

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

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

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的默认行为是创建多维数组。

要想克服这一点需要付出额外的努力。同样地,要撤销它需要额外的努力-创建二维数字数组。

简单地对它调用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]])

相关问题 更多 >