Python3 学习拾遗2
今天观看李沐大神的深度学习视频,突然把以前经常搞混的几个地方弄明白了,所以赶紧记下来。但是感觉和上一篇拾遗距离的时间有点过于久远了,于是干脆再开一篇新的吧。
1. 有趣的+=
无论是在Numpy还是在Torch中,常用的a+=b
与a = 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指定的是消失的维度
网友评论