【问题标题】:One-hot representation of a matrix in numpynumpy中矩阵的one-hot表示
【发布时间】:2017-01-06 19:49:28
【问题描述】:

从值矩阵到 3d 张量中同一事物的一个热表示的最简单/最智能的方法是什么?例如,如果矩阵是张量中 argmax 之后的索引,例如:

indices=numpy.argmax(mytensor,axis=2)

张量是 3D [x,y,z],索引自然是 [x,y]。现在你想去一个 3D [x,y,z] 张量,它在axis = 2中的最大值位置为1s,在任何其他位置为0。

附:我知道向量到 1-hot 矩阵的答案,但这是矩阵到 1-hot 张量。

【问题讨论】:

    标签: python numpy argmax


    【解决方案1】:

    使用broadcasting 的完美设置之一-

    indices[...,None] == np.arange(mytensor.shape[-1])
    

    如果您需要 0s1s 的整数,请附加 .astype(int)

    【讨论】:

    • 很酷的答案!出于好奇,有什么不使用 arange 的吗?
    • @A2B 使用range 而不是np.arange? :) 使用arange 有什么问题?您是否正在寻找一个内置的来创建这样一个单热阵列?如果有,那就没有了。
    • @A2B 我们可以初始化零的 3D 输出数组,然后根据indices 为其分配 1 的值。这对您来说是否优雅?哦,等等,我们仍然需要 np.arange 来作为索引部分。
    • 你不能只说same_shape_zero_tensor[matrix]=1。所以必须有另一个函数将 [i,j]->m 转换为 [i,j,m],它解决了矩阵值 m 所在的位置。
    • @A2B Well indices 是最后一个轴索引。我们只需要生成对应于前两个轴的索引。同样,它必须显式或隐式地创建范围。
    猜你喜欢
    • 1970-01-01
    • 2018-03-30
    • 2021-11-28
    • 2019-06-20
    • 1970-01-01
    • 2017-07-16
    • 2017-01-28
    • 2020-12-29
    • 2021-11-16
    相关资源
    最近更新 更多