也许这是一个非常简单的任务,但是我有一个带shape的numpy.ndarray(1988,3)。
preds = [[1 0 0] [0 1 0] [0 0 0] ... [0 1 0] [1 0 0] [0 0 1]]
我想创建一个1D数组,shape=(1988,),它的值对应于3D数组中值为1的列。例如,
new_preds = [0 1 NaN ... 1 0 2]
我该怎么做呢?
1l5u6lss1#
您可以使用numpy.nonzero:
numpy.nonzero
preds = [[1, 0, 0], [0, 1, 0], [0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 0, 1]] new_preds = np.nonzero(preds)[1]
输出:array([0, 1, 2, 1, 0, 2])
array([0, 1, 2, 1, 0, 2])
preds = [[1, 0, 0], [0, 1, 0], [0, 0, 0], [0, 1, 0], [1, 0, 0], [0, 0, 1]] x, y = np.nonzero(preds) out = np.full(len(preds), np.nan) out[x] = y
输出:array([ 0., 1., nan, 1., 0., 2.])
array([ 0., 1., nan, 1., 0., 2.])
1条答案
按热度按时间1l5u6lss1#
您可以使用
numpy.nonzero
:输出:
array([0, 1, 2, 1, 0, 2])
处理不匹配的行:
输出:
array([ 0., 1., nan, 1., 0., 2.])