将 One-Hot 编码矩阵编码为单个数组整数编码
Encode an One-Hot Encoded Matrix to Single Array Integer Encoded
我有一个现有的矩阵:
array([[0, 1, 0, ..., 0, 1, 0],
[0, 0, 1, ..., 0, 0, 1],
[1, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 1, 0, 0]])
我想对这些行进行编码,所以我得到一个(1,列)数组,其中的整数对应于 value == 1
预期输出
[3, 1, 2, ..., 4, 1, 2]
边缘情况(加)
如果你想多帮忙一点,我可能遇到矩阵如下的情况:
array([[0, 1, 0, ..., 0, 1, 0],
[0, 0, 0, ..., 0, 0, 1],
[1, 0, 0, ..., 0, 0, 0],
[0, 1, 0, ..., 1, 0, 0]])
您可以看到第 1 列和第 2 列(从 0 开始索引)有 2 个值 1 或者根本没有任何值。
在这些情况下,我希望它做的是:
- 填充两行 -> Return 该组合的新值(例如 5、6、7)
- 没有填充行 -> Return 一个新值(例如 0)
第一个问题:
np.argmax(arr, axis=0) + 1
扩展问题:
def get_idx(x):
ret = np.where(x)
return ret[0] + 1 if len(ret[0]) else np.array([0])
[get_idx(a[:,i]) for i in range(a.shape[1])]
# out:
# [array([3]), array([1, 4]), array([0]), array([4]), array([1]), array([2])]
我有一个现有的矩阵:
array([[0, 1, 0, ..., 0, 1, 0],
[0, 0, 1, ..., 0, 0, 1],
[1, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 1, 0, 0]])
我想对这些行进行编码,所以我得到一个(1,列)数组,其中的整数对应于 value == 1
预期输出
[3, 1, 2, ..., 4, 1, 2]
边缘情况(加)
如果你想多帮忙一点,我可能遇到矩阵如下的情况:
array([[0, 1, 0, ..., 0, 1, 0],
[0, 0, 0, ..., 0, 0, 1],
[1, 0, 0, ..., 0, 0, 0],
[0, 1, 0, ..., 1, 0, 0]])
您可以看到第 1 列和第 2 列(从 0 开始索引)有 2 个值 1 或者根本没有任何值。
在这些情况下,我希望它做的是:
- 填充两行 -> Return 该组合的新值(例如 5、6、7)
- 没有填充行 -> Return 一个新值(例如 0)
第一个问题:
np.argmax(arr, axis=0) + 1
扩展问题:
def get_idx(x):
ret = np.where(x)
return ret[0] + 1 if len(ret[0]) else np.array([0])
[get_idx(a[:,i]) for i in range(a.shape[1])]
# out:
# [array([3]), array([1, 4]), array([0]), array([4]), array([1]), array([2])]