ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python通过fancy indexing把数组转换为one hot编码的numpy array

2020-06-11 17:01:56  阅读:308  来源: 互联网

标签:__ python indexing fancy np ind import array numpy


背景

实现一维numpy数组

a = array([1,0,3])

转换为2维的 1-hot数组

b = array([[0,1,0,0], [1,0,0,0], [0,0,0,1]])

python实现示例代码

import numpy as np

if __name__ == '__main__':
    ind = np.array([1, 0, 3])
    x = np.zeros((ind.size, ind.max() + 1))
    x[np.arange(ind.size), ind] = 1
	print(x)

结果展示

[[0. 1. 0. 0.]
 [1. 0. 0. 0.]
 [0. 0. 0. 1.]]

fancy indexing介绍

fancy indexing:传递索引数组来一次返回多个数组元素。

索引为一维数组

import numpy as np

if __name__ == '__main__':
	x = np.array([51, 92, 14, 71, 60, 20, 82, 86, 74, 74])
    ind = [3, 4, 5]
    print(x[ind])

结果展示:

[71 60 20]

索引为二维数组

import numpy as np

if __name__ == '__main__':
    x = np.array([51, 92, 14, 71, 60, 20, 82, 86, 74, 74])
    ind = np.array([[3, 7],
                    [4, 5]])
    print(x[ind])

结果展示:

[[71 86]
 [60 20]]

多个维度

import numpy as np

if __name__ == '__main__':
    x = np.array([[0, 1, 2, 3],
                  [4, 5, 6, 7],
                  [8, 9, 10, 11]])

    row = np.array([0, 1, 2])  # 行
    col = np.array([2, 1, 3])  # 列
    print(x[row, col])

结果展示:

[ 2  5 11]

示例代码解释

上面示例代码相当于多个维度情况即:

import numpy as np

if __name__ == '__main__':
    # ind = np.array([1, 0, 3])
    # x = np.zeros((ind.size, ind.max() + 1))
    # x[np.arange(ind.size), ind] = 1

    x = np.array([[0, 0, 0, 0],
                  [0, 0, 0, 0],
                  [0, 0, 0, 0]])

    row = np.array([0, 1, 2])
    col = np.array([1, 0, 3])
    x[row, col] = 1  # 相当于找好位置后,赋值为1
    print(x)

结果

[[0. 1. 0. 0.]
 [1. 0. 0. 0.]
 [0. 0. 0. 1.]]

标签:__,python,indexing,fancy,np,ind,import,array,numpy
来源: https://blog.csdn.net/qq_33873431/article/details/106669274

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有