python - 将numpy数组转换为2d数组

标签 python pandas numpy multidimensional-array

我有一个具有以下值的 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)

如何将其识别为2d而不是将数组作为值的1d数组。另外为什么它不自动将其检测为二维数组?

最佳答案

为了回答您的评论问题,让我们比较创建数组的2种方法

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

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

关于python - 将numpy数组转换为2d数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50971123/

相关文章:

python - 如何从 Pandas 数据框中访问日期?

python - 条件随机数生成器 python numpy

numpy - Spark 随机森林 - 无法将 float 转换为 int 错误

python - Pandas 数据帧滚动意味着有效

python - OS X 上 $PATH 异常

python - os.walk() 的并行化

python - 如何根据条件计算numpy数组的每个元素

python - Django 如何知道查询集是否被缓存?使用约翰尼缓存

python - 使用 x.unique() 时 Pandas 中变换函数的奇怪行为

python - AssertionError : 22 columns passed, 传递的数据有 21 列