diff(),stack(),hstack(),vstack(),np.ones(),np.zeros()

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完全一样就好了

推荐阅读更多精彩内容

  • 基础篇NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型、通过一个正整数元组索引的元素表格(...
    oyan99阅读 3,673评论 0 19
  • 这三个函数有些相似性,都是堆叠数组,里面最难理解的应该就是stack()函数了,我查阅了numpy的官方文档,在网...
    阿喆_399a阅读 111评论 0 0
  • 介绍 NumPy 是一个 Python 包。 它代表 “Numeric Python”。 它是一个由多维数组对象和...
    喔蕾喔蕾喔蕾蕾蕾阅读 915评论 0 5
  • 先决条件 在阅读这个教程之前,你多少需要知道点python。如果你想从新回忆下,请看看Python Tutoria...
    舒map阅读 1,781评论 1 14
  • NumPy是Python中关于科学计算的一个类库,在这里简单介绍一下。 来源:https://docs.scipy...
    灰太狼_black阅读 723评论 0 4