AI:普通列表数组转化为one-hot编码的numpy数组矩阵

AI:普通列表数组转化为one-hot编码的numpy数组矩阵

import numpy as np
import keras


def dummy_data():
    list1 = [0, 1, 2]
    list2 = [3, 4, 5, 6]
    list3 = [7, 8]
    list4 = [9]

    list = []

    list.append(list1)
    list.append(list2)
    list.append(list3)
    list.append(list4)

    a = np.array(list)
    return a


def to_array(a, col):
    for i in range(len(a)):
        # 假如col=5,那么这里把形如[0,1,2]通过one-hot编码成:
        # [[1,0,0,0,0]
        # [0,1,0,0,0]
        # [0,0,1,0,0]]
        a[i] = keras.utils.to_categorical(np.array(a[i]), num_classes=col)

        # numpy矩阵(数组)的各个行的对应元素相加。把形如:
        # [[1,0,0,0,0]
        #  [0,1,0,0,0]
        #  [0,0,1,0,0]]
        # 的numpy矩阵(数组)相加后变成:
        #  [1,1,1,0,0]
        a[i] = np.sum(a[i], axis=0)

    return a


if __name__ == "__main__":
    a = dummy_data()
    print('原数组:')
    print(a)

    print('\none-hot编码后:')
    a = to_array(a, 15)
    print(a)

输出:

原数组:
[list([0, 1, 2]) list([3, 4, 5, 6]) list([7, 8]) list([9])]

one-hot编码后:
[array([1., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
      dtype=float32)
 array([0., 0., 0., 1., 1., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0.],
      dtype=float32)
 array([0., 0., 0., 0., 0., 0., 0., 1., 1., 0., 0., 0., 0., 0., 0.],
      dtype=float32)
 array([0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.],
      dtype=float32)]
发布了1029 篇原创文章 · 获赞 987 · 访问量 336万+

猜你喜欢

转载自blog.csdn.net/zhangphil/article/details/103315347
今日推荐