【问题标题】:Rearrange 2D numpy array into a column vector maintaining line indexing将 2D numpy 数组重新排列为保持行索引的列向量
【发布时间】:2017-08-08 12:34:42
【问题描述】:

我有一个这种形式的 numpy 数组:

我想重新排列它,以便将列堆叠在一起保持其初始索引(可能是新列)。

我想得到这样的结果:

Jan2017 | 0 | 0
Feb2017 | 0 | 1
Mar2017 | 0 | 1
...
Jan2017 | 1 | 0 
Feb2017 | 1 | 0 etc

其中第一列和第二列表示初始数组的索引

【问题讨论】:

  • 请提供一个非常简单的例子,使用像np.arange(15).reshape((3, 5))这样的数组
  • 这看起来更像是 Pandas 数据框(或类似的)而不是 NumPy 数组。

标签: python arrays numpy reshape


【解决方案1】:

您可以堆叠一个索引数组以及您(可能)DataFrame 中的展平和转置值。

例如:

将熊猫导入为 pd

df = pd.DataFrame({0: [0,1,1,0,0,1,0],
                   1: [0,0,0,0,0,1,0],
                   2: [1,0,1,0,1,0,0]},
                  index=['Jan2017', 'Feb2017', 'Mar2017', 'Apr2017', 'May2017', 'Jun2017', 'Jul2017'])

可以这样处理:

>>> np.stack([np.repeat(np.arange(len(df.columns)), len(df)), df.values.T.ravel()], axis=1)
array([[0, 0],
       [0, 1],
       [0, 1],
       [0, 0],
       [0, 0],
       [0, 1],
       [0, 0],
       [1, 0],
       [1, 0],
       [1, 0],
       [1, 0],
       [1, 0],
       [1, 1],
       [1, 0],
       [2, 1],
       [2, 0],
       [2, 1],
       [2, 0],
       [2, 1],
       [2, 0],
       [2, 0]], dtype=int64)

np.repeat 用于创建索引:

>>> np.repeat(np.arange(len(df.columns)), len(df))
array([0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2])

.T 转置了数组,ravel 将其展平:

>>> df.values.T.ravel()
array([0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0], dtype=int64)

然后使用np.stack“逐行”堆叠(因此是axis=1

【讨论】:

    【解决方案2】:

    假设你的矩阵保存在A,那么你通过A.transpose().flatten()得到向量

    import numpy as np
    
    A = np.arange(12).reshape(3,4)
    
    print(A)
    print(A.transpose().flatten())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      • 2023-03-30
      • 2017-04-16
      • 2021-08-21
      相关资源
      最近更新 更多