连续到分类二维数组

时间:2018-06-19 14:37:44

标签: python arrays pandas numpy

我想将连续的2D numpy数组转换为基于阈值的类别。当我使用pandas cut函数时,我首先必须将flatten转换为一维数组,然后使用cut,但是输出不会用numpy reshape重塑为2D。功能。

这是一个简单的例子:

import numpy as np
import pandas as pd

a = np.random.rand(2,3)
print(a)

b = a.flatten()
print(b)

c = pd.cut(b,(0,0.5,1),labels=[0,1])
print(c)

d = np.reshape(c,(2,3))
print(d)

输出为

[[ 0.56887807  0.1368459   0.34892358]
[ 0.77157277  0.64827644  0.42259086]]
[ 0.56887807  0.1368459   0.34892358  0.77157277  0.64827644  0.42259086]
[1, 0, 0, 1, 1, 0]
Categories (2, int64): [0 < 1]
[1, 0, 0, 1, 1, 0]
Categories (2, int64): [0 < 1]

即使重整命令后,d数组仍保持一维。如何将其重塑回2D?

1 个答案:

答案 0 :(得分:1)

如果您不愿意使用熊猫的Categorical功能,则可以简单地使用np.digitize直接将2D数组转换为分类(整数)值:

应用于简单示例:

c = np.digitize(a, bins=(0.5, 1))
print(c)
# [[1 0 0]
#  [1 1 0]]