python 基于列值将3D numpy数组转换为1D

zc0qhyus  于 2022-12-17  发布在  Python
关注(0)|答案(1)|浏览(152)

也许这是一个非常简单的任务,但是我有一个带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]

我该怎么做呢?

1l5u6lss

1l5u6lss1#

您可以使用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])

处理不匹配的行:
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.])

相关问题