将 2D numpy 数组重新排列为维护行索引的列向量
Rearrange 2D numpy array into a column vector maintaining line indexing
我有一个这种形式的 numpy 数组:
我想重新排列它,以便将列堆叠在一起以保持其初始索引(可能是新列)。
我想以这样的方式结束:
Jan2017 | 0 | 0
Feb2017 | 0 | 1
Mar2017 | 0 | 1
...
Jan2017 | 1 | 0
Feb2017 | 1 | 0 etc
其中第一列和第二列代表初始数组的索引
假设你的矩阵保存在A
,那么你通过A.transpose().flatten()
得到向量
import numpy as np
A = np.arange(12).reshape(3,4)
print(A)
print(A.transpose().flatten())
您可以堆叠一个索引数组以及来自您的(可能)DataFrame
的展平和转置值。
例如:
导入 pandas 作为 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
transposed the array, and 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
堆叠 "row-wise"(因此 axis=1
)
我有一个这种形式的 numpy 数组:
我想重新排列它,以便将列堆叠在一起以保持其初始索引(可能是新列)。
我想以这样的方式结束:
Jan2017 | 0 | 0
Feb2017 | 0 | 1
Mar2017 | 0 | 1
...
Jan2017 | 1 | 0
Feb2017 | 1 | 0 etc
其中第一列和第二列代表初始数组的索引
假设你的矩阵保存在A
,那么你通过A.transpose().flatten()
import numpy as np
A = np.arange(12).reshape(3,4)
print(A)
print(A.transpose().flatten())
您可以堆叠一个索引数组以及来自您的(可能)DataFrame
的展平和转置值。
例如:
导入 pandas 作为 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
transposed the array, and 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
)