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

2022-03-11 13:33:54 浏览数 (1)

在深度学习经常会碰到一段代码,即对数据进行向量化,也就是将整数序列编码为二进制矩阵。具体也就是下面的代码,比较难理解的是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中对单行多列进行赋值是一个道理。无论如何,实践是硬道理,虽然自己傻了点,思考小半天的问题,居然一瞬间想明白了。

0 人点赞