diff()函数:
作用:矩阵中后一个元素减去前一个元素的差值
diff(a,n=b,axis=0):进行b次,axis=0代表从上向下减,跨行,结果会少一行
实例代码与效果
a=[[5, 6, 5, 0],
[5, 1, 7, 4],
[0, 8, 0, 4]]
b = np.diff(a,b=1,axis=0)
效果图
>>> b
array([[ 0, -5, 2, 4],
[-5, 7, -7, 0]])
>>>
再来看看axis=1的情况,就是从后向前依次横着减,跨列,结果少一列
a=[[5, 6, 5, 0],
[5, 1, 7, 4],
[0, 8, 0, 4]]
c= np.diff(a,b=1,axis=1)
效果图
>>> c
array([[ 1, -1, -5],
[-4, 6, -3],
[ 8, -8, 4]])
stack(),hstack(),vstack()函数
这三个函数需要放在一起说
首先stack(),理解了这个函数,剩下的两个没什么难度
stack():
作用:堆叠数组(比较抽象,但是请向下看)
stack(arrays, axis=0):arrays表示数组,axis指的是维度
首先看一个例子
import numpy as np
a=[[1,2,3],
[4,5,6]]
print("增加一维,维度的下标0")
c=np.stack(a,axis=0)
print("增加一维,维度的下标1")
c=np.stack(a,axis=1)
下面是结果
a:
[[1, 2, 3], [4, 5, 6]]
c:
增加一维,维度的下标0
[[1 2 3]
[4 5 6]]
增加一维,维度的下标1
c:
[[1 4]
[2 5]
[3 6]]
首先想说一点,对于a这个数组来说,只能使用axis=0或者axis=1这两个维度,而且使用stack的时候,数组内的元素要格式统一,[1,2,3]和[4,5,6]的形状是一样的,所以可以使用
然后 当axis=0的时候就是分两步
1,在a的元素外层套上个维度,变成[[123]],[[456]]
2,折叠两个元素,就是串起来,得到两个结果[[123],[456]]
当axis=1的时候也分两步
1,在a的元素内层套上一个维度,变成[ [1],[2],[3] ], [ [4],[5],[6] ]
2,依旧是折叠元素,串起来,但是这个时候要把a中原本两个元素的相同位置的元素串起来
[ [1] [2] [3]
[4] [5] [6] ]
串起来
[[1 4] [2 5] [3 6]],这就是最后结果了,因为数组本啦就只能套两层维度
下面来看理解没有
代码
import numpy as np
a=[[1,2,3,4],
[5,6,7,8],
[9,10,11,12]]
print("增加一维,新维度的下标为0")
c=np.stack(a,axis=0)
print("增加一维,新维度的下标为1")
c=np.stack(a,axis=1)
效果图
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
增加一维,新维度的下标为0
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
增加一维,新维度的下标为1
[[ 1 5 9]
[ 2 6 10]
[ 3 7 11]
[ 4 8 12]]
三维的情况
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("增加一维,新维度的下标为0")
d=np.stack((a,b,c),axis=0)
print("增加一维,新维度的下标为1")
d=np.stack((a,b,c),axis=1)
print("增加一维,新维度的下标为2")
d=np.stack((a,b,c),axis=2)
输出:
增加一维,新维度的下标为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]]]
axis=0增加一维的情况与2维的时候类似不再多说
axis==1的时候也是分两步
1,先把abc放一块
[
[1,2,3],[1,2,3],[1,2,3]
,
[4,5,6],[4,5,6],[4,5,6]
]
2,在元素外面套维度得到结果,也有点类似=1的时候
[
[[1,2,3],[1,2,3],[1,2,3]]
,
[[4,5,6],[4,5,6],[4,5,6]]
]
axis=3的时候,维度加在最内层,元素单个可以打乱,相同位置的放在一起,也是分两步
1,abc放一起
[
[1,1,1 , 2,2,2 , 3,3,3],
[4,4,4 , 5,5,5 , 6,6,6]
]
2,给最内层元素套上维度得到结果
[
[[1,1,1] , [2,2,2] , [3,3,3]],
[[4,4,4] , [5,5,5] , [6,6,6]]
]
vstack() 沿着竖直方向将矩阵堆叠起来。
例子
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
res = np.vstack((arr1, arr2))
结果
array([[1, 2, 3],
[4, 5, 6]])
hstack() 沿着水平方向将矩阵堆叠起来。
例子:
>>> arr1 = np.array([1, 2, 3])
>>> arr2 = np.array([4, 5, 6])
>>> res = np.hstack((arr1, arr2))
结果
>>> res
array([1, 2, 3, 4, 5, 6])
再看一个例子
>>> arr1 = np.array([[1, 2], [3, 4], [5, 6]])
>>> arr2 = np.array([[7, 8], [9, 0], [0, 1]])
>>> res = np.hstack((arr1, arr2))
结果
array([[1, 2, 7, 8],
[3, 4, 9, 0],
[5, 6, 0, 1]])
这三个函数就算说完了
np.ones()函数
np.ones(shape,dtype=None,order='C')
shape是形状大小 dtype是类型 order=’c‘是选择c语言风格处理数组,行优先
例子
import numpy as np
ones= np.ones((3,3,2))
结果
>>> ones
array([[[1., 1.],
[1., 1.],
[1., 1.]],
[[1., 1.],
[1., 1.],
[1., 1.]],
[[1., 1.],
[1., 1.],
[1., 1.]]])
接下来是np.zeros(),理解为和ones完全一样就好了