Python3学习拾遗2

Python3 学习拾遗2

今天观看李沐大神的深度学习视频,突然把以前经常搞混的几个地方弄明白了,所以赶紧记下来。但是感觉和上一篇拾遗距离的时间有点过于久远了,于是干脆再开一篇新的吧。

1. 有趣的+=

无论是在Numpy还是在Torch中,常用的a+=ba = a + b其实是有一些不易被人所感知的区别的,其区别在于,第一种方法,不会分配新的内存,而第二种会先将a与b做加法,然后再将其重新分配给一个新的变量名为a的对象。差别代码如下:

import numpy as np

a = np.array([1, 2, 3])
b = np.array([2, 2, 2])
id(a)
---------------------
2473476752944

可以看到a的地址是2473476752944,此时执行如下代码:

a = a + b
id(a)
---------------------
2473477562160

可以明显看到a的地址发生了变化,变成了2473477562160,此时,如果再执行如下代码:

a += b
id(a)
---------------------
2473477562160

可以看到采用+=的形式以后,a的地址并没有发生变化。

2.关于axis

无论是在Numpy、Pandas还是在PyTorch中,都有关于axis的概念,即运算的维度。对于这个概念,我一直有些晕,所以为了防止出错,每次都不得不在电脑上用小规模的数据试验几次,才能搞清楚,今天经过李沐大神一番点拨,终于弄清楚了。

2.1 定义

import numpy as np
x = np.arange(24).reshape(2,3,4)
---------------------
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])

可以看到,最后一位数字,表示的是最里面的那个维度的长度,第一位数字,表示的是最外面的那个维度的长度,这样记起来就不容易混淆了。

2.2 axis

以sum函数为例,axis就可以认为是消失的那个维度,例如:

x.sum(axis=0)
---------------------
array([[12, 14, 16, 18],
       [20, 22, 24, 26],
       [28, 30, 32, 34]])

可以看到当执行sum(axis=0)以后,消失的是第一个维度,新的数据的shape变成了(3, 4)
。因此可以认为:

axis指定的是消失的维度

你可能感兴趣的:(Python3学习拾遗2)