大数据 爬虫Python AI Sqlpython小课——零基础入门——学习笔记Python

Numpy必掌握的76道精选题型!!

2020-05-16  本文已影响0人  溜溜笔记说

本人学东西有点抠牛角尖,所以注释会详细点。希望大家可以从中学到些东西。

1.创建数组的基本方法

#以一维数组为例
import numpy as np #首先导入numpy包
a = np.array([0, 1, 2, 3, 4]) #通过列表创建,注意是中括号
b = np.array((0, 1, 2, 3, 4)) #通过元组创建,注意是小括号
c = np.arange(0,5,1) #0是开始数字,5是结束数字(不含本身),1是间隔;也可以直接省略写成np.arange(5)
d = np.linspace(0, 5, 5,endpoint=False) #linspace 用于在指定的区间内返回间隔均匀的值。0是开始数字,中间5是结束数字,后面的5是元素个数,endpoint=False代表结束数字不含5本身
a,b,c,d

 (array([0, 1, 2, 3, 4]),
  array([0, 1, 2, 3, 4]),
  array([0, 1, 2, 3, 4]),
  array([0., 1., 2., 3., 4.]))

2.通过列表创建一维数组,数组包含1、2、3、4、5这5个数字即可。

a = np.array([1, 2, 3, 4, 5]) #[1, 2, 3, 4, 5]是列表,注意列表是中括号;array为返回数组的函数
a

  array([1, 2, 3, 4, 5])

3.输出该一维数组的形状特征

a.shape

  (5,)

4.输出该一维数组中的元素2与元素3

a[1],a[2] #列表[1, 2, 3, 4, 5]从左到右的索引依次是0,、1、2、3、4,故而a[1]输出2,a[2]输出3

 (2, 3)

5.将该一维数组中的元素1修改成-1

a[0] = -1
a

  array([-1, 2, 3, 4, 5])

6.通过列表创建二维数组

a=np.array([[1, 2, 3], [4, 5, 6]]) #可留意到与题1不同之处,该二维数组中外围有两层中括号
a

 array([[1, 2, 3],
       [4, 5, 6]])

7.输出该二维数组的形状特征

a.shape #代表该二维数组是2行3列

  (2, 3)

8.分别输出该二维数组中的第1行与第2行

a[0],a[1] #留意与题3不同,a[0]表示第1行的索引0,取[1, 2, 3];a[1]表示第2行的索引1,取[4, 5, 6];

  (array([1, 2, 3]), array([4, 5, 6]))

9.获取该二维数组中元素6

a[1, 2] #6在第2行第3列,而第2行的索引是1,第3列的索引是2,所以a[1, 2]

  6

10.将该二维数组中的元素6修改成-1

a[1, 2]=-1
a

 array([[ 1, 2, 3],
        [ 4, 5, -1]])

11.通过列表创建三维数组

a=np.array([[[1, 2, 3], [4, 5, 6]], 
            [[7, 8, 9],[10, 11, 12]]]) #可留意到与题1题5不同之处,该三维数组中外围有三层中括号
a

 array([[[ 1, 2, 3],
        [ 4, 5, 6]],

        [[ 7, 8, 9],
        [10, 11, 12]]])

12.输出该三维数组的形状特征

a.shape #可以想象成立方体的长宽高,第一个2代表深度,第二个2代表2行,第三个3代表3列

  (2, 2, 3)

13.输出该三维数组中的[[1, 2, 3], [4, 5, 6]]

a[0] #索引0对应的是[[1, 2, 3], [4, 5, 6]]

  array([[1, 2, 3],
        [4, 5, 6]])

14.输出该三维数组中的[4, 5, 6]

a[0,1] #索引0对应的是[[1, 2, 3], [4, 5, 6]],而索引1又对应其中的[4, 5, 6]

  array([4, 5, 6])

15.输出该三维数组中的元素9

a[1,0,2] #9位于[[ 7,  8,  9],[10, 11, 12]]中,而[[ 7,  8,  9],[10, 11, 12]]对应索引1,在[[ 7,  8,  9],[10, 11, 12]]中,9又是
         #位于第1行(索引0,第3列(索引2)),所以取索引1、0、2

  9

16.将该三维数组中的元素9修改成-1

a[1,0,2] =-1
a

  array([[[ 1, 2, 3],
         [ 4, 5, 6]],

         [[ 7, 8, -1],
          [10, 11, 12]]])

17.创建一维数组,所有元素为0

a = np.zeros((5)) #zeros填充0的函数。可以换成np.ones试试,全填充1
a

 array([0., 0., 0., 0., 0.])

18.创建二维数组,所有元素为0

a = np.zeros((2,3)) #可以换成np.ones试试,全填充1
a

 array([[0., 0., 0.],
       [0., 0., 0.]])

19.创建二维数组,所有元素为6

np.full((2,3), 6) #也可将6换成True看看效果

 array([[6, 6, 6],
      [6, 6, 6]])

20.创建二维数组,对角线填充1

np.eye(5, 4, 0) #5、4代表5行4列,0代表填充的1是从第0个索引开始的,右下角45度的方向填充1

 array([[1., 0., 0., 0.],
        [0., 1., 0., 0.],
        [0., 0., 1., 0.],
        [0., 0., 0., 1.],
        [0., 0., 0., 0.]])

21.取出一维数组中的某些元素

# 先创建一维数组a
a = np.arange(0, 100, 10)
a

 array([ 0, 10, 20, ..., 70, 80, 90])

a[[1, 5, -1]] #索引1对应10,索引5对应50,索引-1对应90

  array([10, 50, 90])

a[1],a[5],a[-1] #或者采取此方法

  (10, 50, 90)

22.取出一维数组的前5个元素

a[:5]

 array([ 0, 10, 20, 30, 40])

23.取出一维数组中大于某个值的元素

a[a >= 60]

  array([60, 70, 80, 90])

24.取出一维数组中小于某个值的元素

a[np.where(a<= 60)] #np.where(a<= 60)取出的是索引,不是元素,所以需要再在外侧加上a[]

 array([ 0, 10, 20, ..., 40, 50, 60])

25.取出二维数组中的某些元素

# 先创建一个二维数组
a = np.array([[11, 12, 13, 14, 15],
              [16, 17, 18, 19, 20],
              [21, 22, 23, 24, 25],
              [26, 27, 28 ,29, 30],
              [31, 32, 33, 34, 35]])
a[0, 1:4] #0代表第1行(索引从0开始的),1:4代表第一行的12(索引1)、13(索引2)、14(索引3)

  array([12, 13, 14])

a[1:4, 0] #1:4代表中间的三行,0代表第一列,交叉就是[16, 21, 26]

  array([16, 21, 26])

26.取出二维数组中的某些元素

a[::2,::2] #左侧::2代表所有行,但步长为2行的部分,即第1、3、5行;右侧::2代表所有列,但步长为2列的部分,即第1、3、5列

  array([[11, 13, 15],
         [21, 23, 25],
       [31, 33, 35]])

a[:, 1] #:代表所有行,1代表第2列(切记索引是从0开始的)

 array([12, 17, 22, 27, 32])

27.判断数组中元素是否大于20

a > 20

  array([[False, False, False, False, False],
        [False, False, False, False, False],
        [ True, True, True, True, True],
        [ True, True, True, True, True],
        [ True, True, True, True, True]])

28.将数组中大于20的元素取出来

a[a > 20]

 array([21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35])

29.新创建数组b来获取a中的元素

a = np.array([[11, 12, 13, 14, 15],
              [16, 17, 18, 19, 20],
              [21, 22, 23, 24, 25],
              [26, 27, 28 ,29, 30],
              [31, 32, 33, 34, 35]])
b=np.array([0, 2, 0, 1]) 
a[np.arange(4), b] #np.arange(4)是[0, 1, 2, 3],那么a[np.arange(4), b]就是a[[0, 1, 2, 3], [0, 2, 0, 1]];行索引0列索引0是11,行索引1列索引2是18,以此类推

 array([11, 18, 21, 27])

30.将以上结果加上10并且返回到原数组中

a[np.arange(4), b] += 10
a

  array([[21, 12, 13, 14, 15],
        [16, 17, 28, 19, 20],
        [31, 22, 23, 24, 25],
        [26, 37, 28, 29, 30],
        [31, 32, 33, 34, 35]])

31.找出a中数字1的第5次重复的索引

a = np.array([1, 2, 1, 1, 3, 4, 3, 1, 1, 2, 1, 1, 2])
n = 5
a

  array([1, 2, 1, ..., 1, 1, 2])

方法一
[i for i, v in enumerate(a) if v == 1][n-1] #enumerate 函数用于遍历序列中的元素以及它们的下标;遍历a至第5个1停止(n-1是4,但是索引从0开始,所以其实是5个数)

 8

方法二
np.where(a == 1)[0][n-1] #np.where(a == 1)得到的是a为1的索引,然后看到n-1索引的位置下是8

 8

32.改变一维数组的形状

方法一
a=np.arange(10)
a.reshape(2, -1) #不用纠结-1的具体意义,换成-2、-3、-9等,结果不会变化。可理解为该一维数组等分成2行即可。

 array([[0, 1, 2, 3, 4],
        [5, 6, 7, 8, 9]])

方法二
a=np.arange(10)
a.reshape(2, 5) #2行5列

  array([[0, 1, 2, 3, 4],
        [5, 6, 7, 8, 9]])

方法三
a=np.arange(10)
a.resize(2, 5) #reshape 在改变形状时,不会影响原数组,相当于对原数组做了一份拷贝。而 resize 改变了原数组a。
a

  array([[0, 1, 2, 3, 4],
        [5, 6, 7, 8, 9]])

33.生成随机数

方法一
np.random.uniform(5,10, size=(5,3)) ##uniform随机生成一个实数

  array([[6.47685196, 6.35428782, 8.37975113],
        [7.63991692, 8.77225946, 6.17618534],
        [9.16021832, 5.76089746, 8.6702215 ],
        [9.4977338 , 9.73516438, 5.69482014],
        [7.37553017, 5.3912064 , 7.62662221]])

方法二
np.random.randint(10, size=(5, 5)) #生成二维数组

  array([[4, 1, 5, 3, 4],
        [4, 3, 7, 1, 1],
        [7, 7, 0, 2, 9],
        [9, 3, 2, 5, 8],
        [1, 0, 7, 6, 2]])

np.random.randint(2, 5, 10) #生成一维数组

 array([2, 3, 4, ..., 4, 4, 3])

方法三
np.random.rand(2, 5) #创建二维随机数组; rand返回了一个大于等于 0 且小于 1 的平均分布的随机实数。

  array([[0.2 , 0.28, 0.25, 0.17, 0.97],
        [0.96, 0.6 , 0.73, 0.34, 0.09]])

方法四
np.random.randn(1, 10) #从标准正态分布中返回一个或多个样本值。

 array([[ 1.38, -1.19, 0.08, ..., 0.35, -0.7 , 0.11]])

34.两数组相加

a = np.arange(25).reshape((5, 5))
b = np.random.randint(0, 10, (5, 5))
a+b #或者np.add(a, b)

  array([[ 5, 4, 7, 5, 10],
        [ 6, 7, 12, 17, 11],
        [15, 17, 16, 19, 21],
        [24, 23, 20, 18, 21],
        [25, 22, 23, 23, 27]])

35.两数组相减

a-b #或者np.subtract(a,b)

  array([[-5, -2, -3, 1, -2],
        [ 4, 5, 2, -1, 7],
        [ 5, 5, 8, 7, 7],
        [ 6, 9, 14, 18, 17],
        [15, 20, 21, 23, 21]])

36.两数组相乘

a*b #或者np.multiply(a,b)

  array([[ 0, 3, 10, 6, 24],
        [ 5, 6, 35, 72, 18],
        [ 50, 66, 48, 78, 98],
        [135, 112, 51, 0, 38],
        [100, 21, 22, 0, 72]])

37.两数组相除

a/b #或者np.divide(a, b)

  array([[ 0. , 0.33, 0.4 , 1.5 , 0.67],
        [ 5. , 6. , 1.4 , 0.89, 4.5 ],
        [ 2. , 1.83, 3. , 2.17, 2. ],
        [ 1.67, 2.29, 5.67, inf, 9.5 ],
        [ 4. , 21. , 22. , inf, 8. ]])

38.两数组比较大小

a<b

  array([[False, True, True, False, True],
        [ True, False, False, False, False],
        [False, False, False, False, False],
        [False, False, False, False, False],
        [False, False, False, False, False]])

39.数组中各个元素取平方

a = np.arange(25).reshape((5, 5))
a**2

  array([[ 0, 1, 4, 9, 16],
        [ 25, 36, 49, 64, 81],
        [100, 121, 144, 169, 196],
        [225, 256, 289, 324, 361],
        [400, 441, 484, 529, 576]], dtype=int32)

40.数组中所有元素求总和

a.sum()

 300

41.数组中各列元素求总和

np.sum(a, axis=0)

 array([50, 55, 60, 65, 70])

42.数组中各行元素求总和

np.sum(a, axis=1)

 array([ 10, 35, 60, 85, 110])

43.数组中最小/最大元素

a.min() #最大值就是a.max()

 0

44.数组中元素累加值

a.cumsum() #所得到的结果是该结果之前元素之和,如6是0+1+2+3

 array([ 0, 1, 3, ..., 253, 276, 300], dtype=int32)

45.将数组中所有的奇数换成-1,偶数换成1,原数组改变

a[a % 2 == 1] = -1
a[a % 2 == 0] = 1
a #a不再是原来的a了

  array([[-1, -1, -1, -1, -1],
        [-1, -1, -1, -1, -1],
        [-1, -1, -1, -1, -1],
        [-1, -1, -1, -1, -1],
        [-1, -1, -1, -1, -1]])

46.将数组中所有的奇数换成-1,偶数换成1,原数组不改变

np.where(a % 2 == 1, -1, 1)

  array([[ 1, -1, 1, -1, 1],
        [-1, 1, -1, 1, -1],
        [ 1, -1, 1, -1, 1],
        [-1, 1, -1, 1, -1],
        [ 1, -1, 1, -1, 1]])

a #a还是原来的a

  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, 24]])

47.保留3位小数

a = np.random.random([5,3])
np.set_printoptions(precision=3)
a

  varray([[0.664, 0.524, 0.173],
        [0.943, 0.242, 0.999],
        [0.583, 0.183, 0.387],
        [0.19 , 0.411, 0.595],
        [0.717, 0.487, 0.31 ]])

48.计算两个数组间的欧式距离

a = np.array([1,2,3,4,5])
b = np.array([4,5,6,7,8])
np.linalg.norm(a-b) #欧式距离函数。即根号下[(4-1)的平方+(5-2)的平方+(6-3)的平方+(7-4)的平方+(8-5)的平方]

 6.708203932499369

49.向矩阵的每一行添加常数向量

a = np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]])
a 

  array([[ 1, 2, 3],
        [ 4, 5, 6],
        [ 7, 8, 9],
        [10, 11, 12]])

b = np.array([1, 0, 1])
b

 array([1, 0, 1])

方法一
c = np.empty_like(a)
c #形状类似于数组x,但是全部填充为0

  array([[0, 0, 0],
        [0, 0, 0],
        [0, 0, 0],
        [0, 0, 0]])

for i in range(4): #range(4)是0、1、2、3,因为数组a一共就4行,行索引是0、1、2、3
    c[i, :] = a[i, :] + b #i从0-3依次循环。比如i=3时,a[i, :]代表a的第3行、所有列,即[10, 11, 12],再加上b,得到[11 11 13],放于c[i, :],即c的第3行所有列
    
print(c) #完成了向a的每一行都加上了[1, 0, 1]

        [[ 2 2 4]
         [ 5 5 7]
         [ 8 8 10]
         [11 11 13]]

方法二
d = np.tile(b, (4, 1)) #tile的意思是将b横向复制4次,纵向复制1次即可,可改成(4,2)看下不同之处
d               

  array([[1, 0, 1],
        [1, 0, 1],
        [1, 0, 1],
        [1, 0, 1]])

c = a + d
print(c) 

 [[ 2 2 4]
  [ 5 5 7]
  [ 8 8 10]
  [11 11 13]]

方法三
c = a + b  
print(c) 

 [[ 2 2 4]
  [ 5 5 7]
  [ 8 8 10]
  [11 11 13]]

50.二维数组乘以一维数组

a = np.array([1,2,3]) #可单独运行一下
b = np.array([4,5]) 
np.reshape(a, (3, 1)) * b #注意不同于上题中的np.tile(b, (4, 1)),这个是重塑形状,tile是复制形状;可单独运行一下reshape(a, (3, 1))看看结果。

  array([[ 4, 5],
        [ 8, 10],
        [12, 15]])

51.二维数组加上一维数组

a = np.array([1,2,3])
c = np.array([[1,2,3], [4,5,6]])
c + a

  array([[2, 4, 6],
        [5, 7, 9]])

52.不同数组长度的运算

方法一
b = np.array([4,5])
c = np.array([[1,2,3], [4,5,6]])
(c.T + b).T #先转置再运算

  array([[ 5, 6, 7],
        [ 9, 10, 11]])

方法二
c + np.reshape(b, (2, 1))

  array([[ 5, 6, 7],
        [ 9, 10, 11]])

53.绘制简单二次函数图

import numpy as np
import matplotlib.pyplot as plt #引入绘图库

x = np.arange(0,10,2) #x生成了[0, 2, 4, 6, 8]
y = x**2 #y是x的平方

plt.plot(x, y) #意思是以x 为横坐标值,y为纵坐标值绘制曲线
plt.show() #展示出所画图形
在这里插入图片描述

54.纵向叠加两个数组

a = np.arange(10).reshape(2,-1)
b = np.repeat(1, 10).reshape(2,-1)
print(a)
print(b)

 [[0 1 2 3 4]
  [5 6 7 8 9]]
 [[1 1 1 1 1]
  [1 1 1 1 1]]

方法一
np.concatenate([a, b], axis=0) #沿着列叠加

  array([[0, 1, 2, 3, 4],
        [5, 6, 7, 8, 9],
        [1, 1, 1, 1, 1],
        [1, 1, 1, 1, 1]])

方法二
np.vstack([a, b])

  array([[0, 1, 2, 3, 4],
        [5, 6, 7, 8, 9],
        [1, 1, 1, 1, 1],
        [1, 1, 1, 1, 1]])

方法三
np.r_[a, b]

  array([[0, 1, 2, 3, 4],
        [5, 6, 7, 8, 9],
        [1, 1, 1, 1, 1],
        [1, 1, 1, 1, 1]])

55.横向叠加两个数组

a = np.arange(10).reshape(2,-1)
b = np.repeat(1, 10).reshape(2,-1)
print(a)
print(b)

 [[0 1 2 3 4]
  [5 6 7 8 9]]
 [[1 1 1 1 1]
  [1 1 1 1 1]]

方法一
np.concatenate([a, b], axis=1)

  array([[0, 1, 2, ..., 1, 1, 1],
        [5, 6, 7, ..., 1, 1, 1]])

方法二
np.hstack([a, b])

  array([[0, 1, 2, ..., 1, 1, 1],
        [5, 6, 7, ..., 1, 1, 1]])

方法三
np.c_[a, b]

  array([[0, 1, 2, ..., 1, 1, 1],
        [5, 6, 7, ..., 1, 1, 1]])

56.将数组[1,2,3]变成[1, 1, 1, 2, 2, 2, 3, 3, 3]

a = np.array([1,2,3])
np.repeat(a, 3)

 array([1, 1, 1, ..., 3, 3, 3])

57.将数组[1,2,3]变成[1, 2, 3, 1, 2, 3, 1, 2, 3]

a = np.array([1,2,3])
np.tile(a, 3)

 array([1, 2, 3, ..., 1, 2, 3])

58.取数组a、b中的相同的元素

a = np.array([1,2,3,2,3,4])
b = np.array([7,2,9,4,9,8])
np.intersect1d(a,b)

 array([2, 4])

59.从数组a中删除与数组b相同的元素

a = np.array([1,2,3,4,5])
b = np.array([5,6,7,8,9])
np.setdiff1d(a,b) #np.setdiff1d(b,a)正好相反,是从数组b中删除与数组a相同的元素

 array([1, 2, 3, 4])

60.从一维数组中删除所有NaN值

a = np.array([1,2,3,np.nan,5,6,7,np.nan])
a[~np.isnan(a)] #~是“非”的意思,即不是nan

 array([1., 2., 3., 5., 6., 7.])

61.获取a和b元素对应的位置

a = np.array([1,2,3,2,3,4,3,4,5,6])
b = np.array([7,2,10,2,7,4,9,4,9,8])
np.where(a == b)  #a、b在索引1, 3, 5, 7中的元素是一模一样的

 (array([1, 3, 5, 7], dtype=int64),)

62.获取数组a中给定范围的所有元素

方法一
a = np.arange(15)
b= np.where((a >= 5) & (a <= 10))
a[b]

 array([ 5, 6, 7, 8, 9, 10])

方法二
a = np.arange(15)
b = np.where(np.logical_and(a>=5, a<=10)) #np.logical_and/or/not (逻辑与/或/非)
a[b]

 array([ 5, 6, 7, 8, 9, 10])

方法三
a = np.arange(15)
a[(a >= 5) & (a <= 10)]

 array([ 5, 6, 7, 8, 9, 10])

63.交换二维numpy数组中的两列

arr = np.arange(9).reshape(3,3)
arr

  array([[0, 1, 2],
        [3, 4, 5],
        [6, 7, 8]])

arr[:, [1,0,2]] #左侧:代表所有行,右侧代表列索引

 array([[1, 0, 2],
        [4, 3, 5],
        [7, 6, 8]])

64.交换二维numpy数组中的两行

arr = np.arange(9).reshape(3,3)
arr

  array([[0, 1, 2],
        [3, 4, 5],
        [6, 7, 8]])

arr[[1,0,2],:] 

  array([[3, 4, 5],
        [0, 1, 2],
        [6, 7, 8]])

65.行倒数

arr = np.arange(9).reshape(3,3)
arr[::-1]

  array([[6, 7, 8],
        [3, 4, 5],
        [0, 1, 2]])

66.列倒数

arr = np.arange(9).reshape(3,3)
arr[:,::-1]

  array([[2, 1, 0],
        [5, 4, 3],
        [8, 7, 6]])

67.限制打印的元素数目

np.set_printoptions(threshold=6) #threshold表示限制出现6个元素
a = np.arange(15)
a

 array([ 0, 1, 2, ..., 12, 13, 14])

68.创建以5起始,累加3,长度为10的一维数组

length = 10
start = 5
step = 3

def seq(start, length, step):
    end = start + (step*length) #end=5+3*10=35
    return np.arange(start, end, step) #np.arange(5, 35, 3)

seq(start, length, step)

 array([ 5, 8, 11, ..., 26, 29, 32])

69.计算numpy数组的移动平均值

np.random.seed(100) #seed是随机数种子,利用随机数种子,每次生成的随机数相同。比如保持100,每次运行生成的随机数不会变。
Z = np.random.randint(10, size=6)
print('array: ', Z)

 array: [8 8 3 7 7 0]

方法一
def moving_average(a, n=3) :
    ret = np.cumsum(a)
    ret[n:] = ret[n:] - ret[:-n]
    return ret[n - 1:] / n
moving_average(Z, n=3).round(3)

 array([6.333, 6. , 5.667, 4.667])

方法二
np.convolve(Z, np.ones(3)/3, mode='valid') 
#convolve是numpy函数中的卷积函数库。
# Z是输入的一维数组
# np.ones(3)/3是输入的第二个一维数组
#当mode='valid'时返回的数组长度为这两个一维数组的最长长度-最短长度+1,即6-3+1=4,代表了最终结果长度是4

 array([6.333, 6. , 5.667, 4.667])

70.将时间转换成数字表示

from datetime import datetime
dt64 = np.datetime64('2018-02-25 22:10:10')
dt64

 numpy.datetime64('2018-02-25T22:10:10')

方法一
dt64.tolist() #转换列表函数

 datetime.datetime(2018, 2, 25, 22, 10, 10)

方法二
dt64.astype(datetime) 

 datetime.datetime(2018, 2, 25, 22, 10, 10)

71.找到一个一维数组a中的所有峰值

#第1步:先求出后一项减去前一项的差值
a = np.array([1, 3, 7, 1, 2, 6, 0, 1])
b=np.diff(a)
b

 array([ 2, 4, -6, ..., 4, -6, 1])

#第2步:利用符号函数,将正数记作1,负数记作-1
c=np.sign(b)
c

 array([ 1, 1, -1, ..., 1, -1, 1])

#第3步:再求出后一项减去前一项的差值
d=np.diff(c)
d

 array([ 0, -2, 2, 0, -2, 2])

#第4步:获取d中元素为-2的索引。原因是如果7是峰值,(后一项-7)-(7-前一项)的值必定是负数:-2(提前已经利用符号函数sign变成1与-1了)
e=np.where(d == -2)
print(e)

 (array([1, 4], dtype=int64),)

#第5步:将-2获取的索引加上1即可
e[0]+1

 array([2, 5], dtype=int64)

72.获取数组每行的最小值

np.random.seed(100) #使得即使多次运行代码,随机数不会变,除非更改seed()内的数字
a = np.random.randint(1,10, [5,3])
a

  array([[9, 9, 4],
        [8, 8, 1],
        [5, 3, 6],
        [3, 3, 3],
        [2, 1, 9]])

np.apply_along_axis(lambda x:min(x), arr=a, axis=1)#将arr数组的每一个元素经过lambda x:min(x)函数变换形成的一个新数组

 array([4, 1, 3, 3, 1])

73.对一维数组a中的所有元素设置从小到大排序的排序号

np.random.seed(10)
a = np.random.randint(20, size=6)
a

 array([ 9, 4, 15, 0, 17, 16])

a.argsort().argsort() #代表了每个元素从小到大位于第几位

 array([2, 1, 3, 0, 5, 4], dtype=int64)

74.对二维数组a中的所有元素设置从小到大排序的排序号

np.random.seed(10)
a = np.random.randint(20, size=[2,3])
a

  array([[ 9, 4, 15],
        [ 0, 17, 16]])

#第1步:先将二维数组转变成一维数组
a.ravel()

 array([ 9, 4, 15, 0, 17, 16])

#第2步:将元素从小到大排列的索引号取出来,比如最小元素的索引号是3,正好对应第一步结果的0
a.ravel().argsort()

 array([3, 1, 0, 2, 5, 4], dtype=int64)

#第3步:继续将第2步的结果中的元素从小到大排列的索引号取出来,代表了每个元素从小到大位于第几位
a.ravel().argsort().argsort() 

 array([2, 1, 3, 0, 5, 4], dtype=int64)

#第4步:返回二维数组
a.ravel().argsort().argsort().reshape(a.shape)#也可以直接print(a.ravel().argsort().argsort().reshape(a.shape))一步达成。

  array([[2, 1, 3],
        [0, 5, 4]], dtype=int64)

75.将多个一维数组连接一起

a = np.arange(3)
b = np.arange(3,7)
c = np.arange(7,10)

m = np.array([arr1, arr2, arr3])
m

 array([array([0, 1, 2]), array([3, 4, 5, 6]), array([7, 8, 9])],
dtype=object)

方法一
n = np.array([i for mm in m for i in mm])
n

 array([0, 1, 2, ..., 7, 8, 9])

方法二
n = np.concatenate(m)
n

 array([0, 1, 2, ..., 7, 8, 9])

76.将小于最小值的元素变成最小值,大于最大值的元素变成最大值

np.set_printoptions(precision=2)#设置小数位为2
np.random.seed(100)
a = np.random.uniform(1,50, 6)
a

 array([27.63, 14.64, 21.8 , 42.39, 1.23, 6.96])

方法一
np.clip(a, a_min=10, a_max=30) #clip将元素限制在a_min, a_max之间,大于a_max的就使它等于 a_max,小于a_min的就使它等于a_min。

 array([27.63, 14.64, 21.8 , 30. , 10. , 10. ])

方法二
np.where(a < 10, 10, np.where(a > 30, 30, a))

 array([27.63, 14.64, 21.8 , 30. , 10. , 10. ])


以上题型是本人在学习Numpy中文网的过程中认认真真整理下来的。
感谢Numpy中文网!
https://www.numpy.org.cn/

大家在学习过程中如果发现不正确的地方,欢迎指正!共同进步!

上一篇 下一篇

猜你喜欢

热点阅读