前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于深度学习系列笔记八(numpy数组赋值小技巧)

关于深度学习系列笔记八(numpy数组赋值小技巧)

作者头像
python与大数据分析
发布2022-03-11 13:33:54
9610
发布2022-03-11 13:33:54
举报
文章被收录于专栏:python与大数据分析

在深度学习经常会碰到一段代码,即对数据进行向量化,也就是将整数序列编码为二进制矩阵。具体也就是下面的代码,比较难理解的是results[i, sequence] = 1.

,这段代码怎么就把就把数组该行上的某些列给赋值成1.0了?

代码语言:javascript
复制
import numpy as np
def vectorize_sequences(sequences, dimension=10000):
    results = np.zeros((len(sequences), dimension))
    for i, sequence in enumerate(sequences):
        results[i, sequence] = 1.
    return results
x_train = vectorize_sequences(train_data)
x_test = vectorize_sequences(test_data)

实验的过程如下,未必能完全理解,但至少知道上面的代码是如何发挥作用的。

1、先构造一个(2,10)的0值numpy矩阵

2、构造两个list对象,注意list中最大值要小于numpy的列。

3、把这两个list对象组合成numpy矩阵,这个矩阵是一维的

4、按照上面的方法进行赋值,观察其输出,发现指定位置上的值已更新为1

5、再单独构造一个list,对矩阵相关位置直接赋值,再观察其输出。

代码语言:javascript
复制
import numpy as np
s=(2, 10)
results = np.zeros(s)
#results =
#[[0. 0. 0. 0. 0.]
# [0. 0. 0. 0. 0.]]
a=list([1,2,3])
b=list([2,3,4,5])
sequences=np.array([a,b])
#sequences=[list([1, 2, 3]) list([2, 3, 4, 5])]

for i, sequence in enumerate(sequences):
    print('i,sequence=',i,sequence)
    #i, sequence = 0[1, 2, 3]           #sequences第一行
    #i, sequence = 1[2, 3, 4, 5]        #sequences第二行
    results[i, sequence] = 1.
    #[0. 1. 1. 1. 0. 0. 0. 0. 0. 0.]    #results第一行
    #[0. 0. 1. 1. 1. 1. 0. 0. 0. 0.]    #results第二行

#results =
#[[0. 1. 1. 1. 0. 0. 0. 0. 0. 0.]
# [0. 0. 1. 1. 1. 1. 0. 0. 0. 0.]]
rep=list([6,7,8])
results[0,rep]=1.0
#results =
#[[0. 1. 1. 1. 0. 0. 1. 1. 1. 0.]
# [0. 0. 1. 1. 1. 1. 0. 0. 0. 0.]]

写在最后的话,突然想明白了,如同excel中对单行多列进行赋值是一个道理。无论如何,实践是硬道理,虽然自己傻了点,思考小半天的问题,居然一瞬间想明白了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python与大数据分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档