10.1 numpy模块

10.1 numpy模块

  • numpy模块下载:pip install numpy
  • 学到过的python基础数据类型:int/float/str/list/dict/tuple/set;其中 list/dict 用的多。
  • 列表在numpy中叫作一维数组
  • numpy基础数据类型:一维数组,二维数组,三维数组

以下代码均为使用jupyter书写,方便交互。

1.一维数组

  • 只有一行,一个列表放多个元素;相当于一条线。
import numpy as np #重命名为np
lis=[1,2,3]
np.array(lis)

#输出
array([1, 2, 3])

2.二维数组(用的最多)

  • 有行有列,一个列表放了多个一维数组;相当于一个面,面里有很多线。
import numpy as np 
arr=np.array([ [1,2,3,4],
              [5,6,7,8] ])
arr

#输出
array([[1, 2, 3, 4],
       [5, 6, 7, 8]])

3.三维数组(了解)

  • 一个列表放多个二维数组,相当于一个体,里面有多个面。
import numpy as np 
arr=np.array([[[1,2,3,4],[5,6,7,8]],[[1,2,3,4],[5,6,7,8]],[[1,2,3,4],[5,6,7,8]]])
arr

#输出
array([[[1, 2, 3, 4],
        [5, 6, 7, 8]],

       [[1, 2, 3, 4],
        [5, 6, 7, 8]],

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

4.回顾list方法

  • 索引\切片\长度\成员运算\for循环\append等内置方法

5. np.array和list的区别

  • np.array是多维数组,list是一维数组。
  • list对一维数组做一些操作(内置方法),numpy是对多维做操作(内置方法)

6. numpy内置方法

(1)获取多维数组的行和列(二维数组)

import numpy as np 
arr=np.array([ [1,2,3,4],
              [5,6,7,8] ])
arr.shape #获取行数和列数

#输出
(2, 4)
arr=np.array([ [1,2,3,4],
              [5,6,7,8] ])
arr.shape[0] #获取行数

#输出
2
arr=np.array([ [1,2,3,4],
              [5,6,7,8] ])

arr.shape[1] #获取列数

#输出
4

(2)多维数组索引取值

lis=[1,2,3,4]
lis[1]

#输出
2
arr=np.array([ [1,2,3,4],
              [5,6,7,8] ])
#取出元素7
arr[1,2] #第一行第三列元素为7,行和列用逗号隔开
#or
# arr[1][2] 

#输出
7
arr=np.array([ [1,2,3,4],
              [5,6,7,8] ])
arr[0,[0,1,2,3]]  #取第一行元素
# or
# arr[0]

#输出
array([1, 2, 3, 4])
arr=np.array([ [1,2,3,4],
              [5,6,7,8] ])
arr[0,:] #拿到第一行所有列

#输出
array([1, 2, 3, 4])
arr=np.array([ [1,2,3,4],
              [5,6,7,8] ])
arr[:,1] #拿到第二列元素

#输出
array([2, 6])

高级功能
有一个多维数组存储的是人的年龄,表格内有200岁以上的年龄

import numpy 
arr=np.array([ [100,212,30,4],
              [5,600,7,80],
              [5,6,700,8] ])
arr>200 #>200元素为True,<200元素为False

#输出
array([[False,  True, False, False],
       [False,  True, False, False],
       [False, False,  True, False]])
#获取大于200的元素
arr=np.array([ [100,212,30,4],
              [5,600,7,80],
              [5,6,700,8] ])
arr[arr>200]

#输出
array([212, 600, 700])

(3)多维数组的元素的替换

#列表元素的替换
lis=[1,2,3,4]
lis[0]=0
lis

#输出
[0, 2, 3, 4]
#多维数组元素的替换
import numpy 
arr=np.array([ [100,212,30,4],
              [5,600,7,80],
              [5,6,700,8] ])
arr[1,1]=0
# arr[1][1]=0

arr #arr是可变数据类型

#输出
array([[100, 212,  30,   4],
       [  5,   0,   7,  80],
       [  5,   6, 700,   8]])
arr=np.array([ [100,212,30,4],
              [5,600,7,80],
              [5,6,700,8] ])
arr[0,:]=0 #第一行元素都变0
# arr[0]=0 
arr

#输出
array([[  0,   0,   0,   0],
       [  5, 600,   7,  80],
       [  5,   6, 700,   8]])
import numpy 
arr=np.array([ [100,212,30,4],
              [5,600,7,80],
              [5,6,700,8] ])

#大于200的元素设置为0

arr[arr>200]=0
arr

#输出
array([[100,   0,  30,   4],
       [  5,   0,   7,  80],
       [  5,   6,   0,   8]])

(4)多维数组合并

  • 什么情况下需要合并?
    两份表格做的是一样的是事情,需要合并两个表格,方便一起对数据进行处理。

  • vstack & hstack
    只能放一个参数,这个参数必须得是容器

#垂直合并
import numpy as np
arr1=np.array([[1,2,3,4],[5,6,7,8]])

arr2=np.array([[10,20,30,40],[50,60,70,80]])

np.vstack((arr1,arr2))  #vertical

#输出
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [10, 20, 30, 40],
       [50, 60, 70, 80]])
#横向合并
import numpy as np
arr1=np.array([[1,2,3,4],[5,6,7,8]])

arr2=np.array([[10,20,30,40],[50,60,70,80]])

np.hstack((arr1,arr2))  #传入列表或元组
np.hstack([arr1,arr2])  #传入列表或元组

#输出
array([[ 1,  2,  3,  4, 10, 20, 30, 40],
       [ 5,  6,  7,  8, 50, 60, 70, 80]])
  • concatenate

在numpy中,为了统一做处理,只要有axis=0就是列,axis=1就是行。在pandas中可能也有所不同,不确定axis=0是行还是列,可以打印看一下

#垂直合并
import numpy as np
arr1=np.array([[1,2,3,4],[5,6,7,8]])

arr2=np.array([[10,20,30,40],[50,60,70,80]])

np.concatenate((arr1,arr2),axis=0) #默认垂直合并,axis=0为列

#输出
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [10, 20, 30, 40],
       [50, 60, 70, 80]])
#横向合并
import numpy as np
arr1=np.array([[1,2,3,4],[5,6,7,8]])

arr2=np.array([[10,20,30,40],[50,60,70,80]])

np.concatenate((arr1,arr2),axis=1) #axis=1为行

#输出
array([[ 1,  2,  3,  4, 10, 20, 30, 40],
       [ 5,  6,  7,  8, 50, 60, 70, 80]])

(5)通过函数方法创建多维数组

  • 创建一维数组
[i for i in range(10)]

#输出
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
import numpy as np
np.arange(10)

#输出
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
import numpy as np
np.arange(1,10,2) #从1-10步长为2

#输出
array([1, 3, 5, 7, 9])
  • ones:全1数组
import numpy as np

np.ones((3,4)) #3行4列的全1数组
#输出的是浮点型

#输出
array([[1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.]])
import numpy as np
np.ones((3,4),dtype=int) #指定为整型

#输出
array([[1, 1, 1, 1],
       [1, 1, 1, 1],
       [1, 1, 1, 1]])
  • zeros,全0数组
import numpy as np

np.zeros((3,4)) #3行4列的全0数组

#输出
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])
import numpy as np

np.zeros((3,4,5)) #生成三维,3个4行5列的二维数组
#5控制列,一维;4,5控制二维;3,4,5控制三维

#输出
array([[[0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.]],

       [[0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.]],

       [[0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.]]])
  • eye
    生成单位矩阵
import numpy as np
np.eye(3) #生成三行三列单位矩阵,类型是浮点型

#输出
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])

(6)矩阵的运算

涉及到需要两个矩阵运算的,两个矩阵形状需要一样

+ :两个矩阵对应元素相加
- :两个矩阵对应元素相减
* :两个矩阵对应元素相乘
/ :两个矩阵对应元素相除,如果都是整数则取商
% :两个矩阵对应元素相除取余
** n :单个矩阵每个元素都取n次方,如**2:每个元素都取平方
# 1 相加
import numpy as np
arr1=np.array([[1,2,3,4],[5,6,7,8]])

arr2=np.array([[10,20,30,40],[50,60,70,80]])

arr1+arr2

#其他也都类似

#输出
array([[11, 22, 33, 44],
       [55, 66, 77, 88]])
# 2 **n
import numpy as np
arr1=np.array([[1,2,3,4],[5,6,7,8]])

arr1**2

#输出
array([[ 1,  4,  9, 16],
       [25, 36, 49, 64]])

(7)点乘和转置(了解)

*点乘是线性代数知识,具体计算过程可以查百度。

  • 需要满足要求:
    (1)矩阵arr1 :nm ,n行m列
    矩阵arr2 :m
    k ,m行k列
    (4)arr1、arr2点乘得到的矩阵形状为n*k(n=m=k也可以)
import numpy as np
arr1=np.array([[1,2,3,4],[5,6,7,8]])
np.dot(arr1,arr1.T)

#输出
array([[ 30,  70],
       [ 70, 174]])

(8)求逆(了解)

  • 要求逆的矩阵需要为方阵。
  • 线性代数知识,具体运算过程可百度。
import numpy as np
arr1=np.array([[1,2,3,4],[5,6,7,8]])
arr=np.dot(arr1,arr1.T)
np.linalg.inv(arr)

#输出
array([[ 0.54375, -0.21875],
       [-0.21875,  0.09375]])

(9)最大值 & 最小值

import numpy as np
arr1=np.array([[1,2,3,4],[10,6,7,8]])
arr1.max()

#输出
10
import numpy as np
arr1=np.array([[1,2,3,4],[10,6,7,8]])

arr1.min()

#输出
1

(10)numpy生成随机数

  • 之前生成随机数都是一维的,现在生成多维。
np.random.rand(3,4) #随机生成3行4列的二维数组,取值范围是(0,1)
# np.random.rand(3,4,5) #生成三维

#输出
array([[0.68650093, 0.83462567, 0.01828828, 0.75014431],
       [0.98886109, 0.74816565, 0.28044399, 0.78927933],
       [0.10322601, 0.44789353, 0.9085955 , 0.29361415]])
  • 随机种子,固定随机数。
import numpy as np
np.random.seed(1) #永不随机,固定 
np.random.rand(3,4) 

#输出
array([[4.17022005e-01, 7.20324493e-01, 1.14374817e-04, 3.02332573e-01],
       [1.46755891e-01, 9.23385948e-02, 1.86260211e-01, 3.45560727e-01],
       [3.96767474e-01, 5.38816734e-01, 4.19194514e-01, 6.85219500e-01]])
rs=np.random.RandomState(1)
rs.rand(3,4)

#输出
array([[4.17022005e-01, 7.20324493e-01, 1.14374817e-04, 3.02332573e-01],
       [1.46755891e-01, 9.23385948e-02, 1.86260211e-01, 3.45560727e-01],
       [3.96767474e-01, 5.38816734e-01, 4.19194514e-01, 6.85219500e-01]])

(11)其他高级方法

where,apply
posted @ 2025-09-04 15:19  bokebanla  阅读(9)  评论(0)    收藏  举报