【问题标题】:Concating a nested numpy array into 2D array将嵌套的 numpy 数组连接成二维数组
【发布时间】:2016-07-04 13:27:55
【问题描述】:

我正在使用 Pandas 生成一些信息和功能。我将使用该数据库作为 sklearn 的输入。目前,我正在使用.as_matrix() 将数据帧转换为数组。以下是输出:

array([[0.4437294900417328, 0.13434134423732758, 0.474, 0.482,
    array([0, 0, 0, 0, 0, 0, 1, 0, 0, 0])],
   [0.09896088391542435, 0.10105254501104355, 0.474, 0.526,
    array([0, 0, 0, 0, 0, 1, 0, 0, 0, 0])],
   [0.026971107348799706, 0.08766224980354309, 0.474, 0.581,
    array([0, 0, 0, 0, 0, 0, 1, 0, 0, 0])],
   ..., 

我想将这个内部数组分解为父二维数组。结果应该是这样的。

array([[0.4437294900417328, 0.13434134423732758, 0.474, 0.482,
    0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
   [0.09896088391542435, 0.10105254501104355, 0.474, 0.526,
    0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
   [0.026971107348799706, 0.08766224980354309, 0.474, 0.581,
    0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
   ..., 

TIA

【问题讨论】:

  • 它应该已经输出了一个二维数组,除非你的数据有什么奇怪的地方。 as_matrix() 之前的数据框是什么样的?
  • 外部数组是 dtype 对象。如果子数组的大小相同,则 ravel 后跟 concatenate 可能会起作用。
  • 你需要告诉我们主数组的shapedtype。有几个嵌套级别很难从打印输出中破译。它是列表数组还是二维数组?看起来内部列表或维度由一堆浮点数和一个数组组成。我们需要知道这一点才能重新创建数组(不是确切的数字,只是结构)并在交互式 shell 中使用它。
  • 我在dataframe 中添加了附加array。这导致了这个看起来很奇怪的数据。我通过不这样做解决了我的问题。后来我发现np.c_ 这就是我正在寻找的答案。

标签: python arrays numpy pandas scikit-learn


【解决方案1】:

正如我所评论的,您的数组的确切结构尚不清楚。我确定外部 dtype 是对象。 Pandas 经常使用它来保存混合数据。

这是一个猜测和可能的解决方案:

创建一个对象数组并用一些浮点数和整数数组填充它:

In [38]: A=np.empty((3,5),dtype=object)
In [39]: A[:,:4]=np.arange(12.).reshape(3,4)/10
In [40]: A[0,-1]=np.arange(5)
In [41]: A[1,-1]=np.arange(1,6)
In [42]: A[2,-1]=np.arange(2,7)
In [43]: A
Out[43]: 
array([[0.0, 0.1, 0.2, 0.3, array([0, 1, 2, 3, 4])],
       [0.4, 0.5, 0.6, 0.7, array([1, 2, 3, 4, 5])],
       [0.8, 0.9, 1.0, 1.1, array([2, 3, 4, 5, 6])]], dtype=object)

打印类似。 reshapeconcatenateravel 等不要加入浮点数和数组。

相反,让我们创建一个数组来保存预期值,并将它们复制到其中:

In [44]: B=np.zeros((3,9),float)
In [45]: B[:,:4]=A[:,:4]

复制浮动列很容易。但是将数组重新加工成可以作为块复制的东西,需要串联。 vstack 表单似乎可以解决问题:

In [46]: B[:,4:]=np.vstack(A[:,-1])
In [47]: B
Out[47]: 
array([[ 0. ,  0.1,  0.2,  0.3,  0. ,  1. ,  2. ,  3. ,  4. ],
       [ 0.4,  0.5,  0.6,  0.7,  1. ,  2. ,  3. ,  4. ,  5. ],
       [ 0.8,  0.9,  1. ,  1.1,  2. ,  3. ,  4. ,  5. ,  6. ]])

我必须根据我对数组显示的了解(包括对象类型)重新创建您的数组。然后我只需要四处玩耍,尝试各种加入价值观的方式。所以有很多尝试和错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 2021-07-10
    • 2021-09-03
    • 1970-01-01
    • 2017-08-18
    • 2018-01-29
    • 1970-01-01
    相关资源
    最近更新 更多