参考另外一篇博客对这三个函数的详解,再加上自己的体会记录如下
1. stack()
(1)给出代码(二维的例子)
import numpy as np
a=[[1,2,3],
[4,5,6]]
print("列表a如下:")
print(a)
print("增加一维,新维度的下标为0")
c=np.stack(a,axis=0)
print(c)
print("增加一维,新维度的下标为1")
c=np.stack(a,axis=1)
print(c)
输出:
列表a如下:
[[1, 2, 3], [4, 5, 6]]
增加一维,新维度下标为0
[[1 2 3]
[4 5 6]]
增加一维,新维度下标为1
[[1 4]
[2 5]
[3 6]]
(2)理解
参考的那篇博客上面是用套箱子的方法理解,但是我并没有完全看明白,不知道axis的参数对应的是哪个箱子。所以我自己理解了一下。stack()函数不是增加了维度,而是改变了数组的堆叠方法,进而改变维度。
我们可以将a的行看做0维度,列看做1维度。当axis=0时,对0维度进行改变,即按行进行堆叠。当axis=1时,对1维度进行改变,即按列进行堆叠。按照这个方法可以验证输出。
(3)给出代码(三维的例子)
import numpy as np
a=[[1,2,3],
[4,5,6]]
b=[[1,2,3],
[4,5,6]]
c=[[1,2,3],
[4,5,6]]
print("a=",a)
print("b=",b)
print("c=",c)
print("增加一维,新维度的下标为0")
d=np.stack((a,b,c),axis=0)
print(d)
print("增加一维,新维度的下标为1")
d=np.stack((a,b,c),axis=1)
print(d)
print("增加一维,新维度的下标为2")
d=np.stack((a,b,c),axis=2)
print(d)
输出:
('a=', [[1, 2, 3], [4, 5, 6]])
('b=', [[1, 2, 3], [4, 5, 6]])
('c=', [[1, 2, 3], [4, 5, 6]])
增加一维,新维度的下标为0
[[[1 2 3]
[4 5 6]]
[[1 2 3]
[4 5 6]]
[[1 2 3]
[4 5 6]]]
增加一维,新维度的下标为1
[[[1 2 3]
[1 2 3]
[1 2 3]]
[[4 5 6]
[4 5 6]
[4 5 6]]]
增加一维,新维度的下标为2
[[[1 1 1]
[2 2 2]
[3 3 3]]
[[4 4 4]
[5 5 5]
[6 6 6]]]
(4)理解:
如上面理解的一样,可以把元组(a,b,c)的行看做0维度,列看做1维度,每行的元素看做2维度。(注意元组(a,b,c)是在abc外再加一个括号)
当axis=0时,元组(a,b,c)的第0维是最外一层的中括号的下一层,即a元素,b元素和c元素,把他们堆叠在一起就是每个第一次的输出。
当axis=1时,元组(a,b,c)的第1维是a元素的行,b元素的行和c元素的行,即把a,b,c按行堆叠,堆叠完第一行再堆叠a,b,c的第二行。
当axis=2时,元组(a,b,c)的第2维是a元素的元素级别,b元素的元素级别,c元素的元素级别,即按元素的元素进行堆叠。