我想将连续的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?
答案 0 :(得分:1)
如果您不愿意使用熊猫的Categorical
功能,则可以简单地使用np.digitize
直接将2D数组转换为分类(整数)值:
应用于简单示例:
c = np.digitize(a, bins=(0.5, 1))
print(c)
# [[1 0 0]
# [1 1 0]]