Numpy基础

扩展库Numpy简介

参考资料:《Python可以这样学》(董付国)
本文原来是写在jupyter notebook上的,转成了.md格式再复制到这里来的,如果你觉得这样看起来不方便,需要.ipynb格式,请私信我:)

import numpy as np #导入numpy模块

1.生成数组

np.array((1,2,3,4,5)) #把Python列表转换成数组
array([1, 2, 3, 4, 5])
np.array(range(5)) #把range对象转换成数组
array([0, 1, 2, 3, 4])
np.array([[1,2,3],[4,5,6]])
array([[1, 2, 3],
       [4, 5, 6]])
np.linspace(0,10,11) #生成等差数组 表示从0到10生成11个数
array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.])
np.linspace(0,1,11) #表示0到1生成11个数
array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])
np.logspace(0,100,10) #对数数组  从0到100等差取十个数,做幂运算。令公差为d,返回的十个为10的0次方、d次方、2d次方
array([1.00000000e+000, 1.29154967e+011, 1.66810054e+022, 2.15443469e+033,
       2.78255940e+044, 3.59381366e+055, 4.64158883e+066, 5.99484250e+077,
       7.74263683e+088, 1.00000000e+100])
np.zeros((3,3)) #全0二维数组
array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]])
np.zeros((3,1))
array([[0.],
       [0.],
       [0.]])
np.zeros((1,3))
array([[0., 0., 0.]])
np.ones((3,3)) #全1二维数组
array([[1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.]])
np.identity(4) #单位矩阵
array([[1., 0., 0., 0.],
       [0., 1., 0., 0.],
       [0., 0., 1., 0.],
       [0., 0., 0., 1.]])
np.empty((3,3)) #空数组,只申请空间而不初始化,元素值是不确定的
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])

2.数组与数值的算术运算

x=np.array((1,2,3,4,5))  #创建数组对象
x
array([1, 2, 3, 4, 5])
x*2
array([ 2,  4,  6,  8, 10])
x/2
array([0.5, 1. , 1.5, 2. , 2.5])
x//2
array([0, 1, 1, 2, 2], dtype=int32)
x **3
array([  1,   8,  27,  64, 125], dtype=int32)
x+2  #数组与数值相加
array([3, 4, 5, 6, 7])
x%3 #余数
array([1, 2, 0, 1, 2], dtype=int32)

3.数组与数组的算术运算

a = np.array((1,2,3))
b = np.array(([1,2,3],[4,5,6],[7,8,9]))
c = a*b   #数组相乘,a中的每个元素乘以b中的每一列元素
c
array([[ 1,  4,  9],
       [ 4, 10, 18],
       [ 7, 16, 27]])
c/b
array([[1., 2., 3.],
       [1., 2., 3.],
       [1., 2., 3.]])
c/a
array([[1., 2., 3.],
       [4., 5., 6.],
       [7., 8., 9.]])
a+a
array([2, 4, 6])
a*a
array([1, 4, 9])
a-a
array([0, 0, 0])
a/a
array([1., 1., 1.])

4.二维数组转置

b = np.array(([1,2,3],[4,5,6],[7,8,9]))
b
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
b.T
array([[1, 4, 7],
       [2, 5, 8],
       [3, 6, 9]])
a=np.array((1,2,3,4))
a
array([1, 2, 3, 4])
a.T  #一维数组转置以后和原来是一样的
array([1, 2, 3, 4])

5.向量内积

a=np.array((5,6,7))
b=np.array((6,6,6))
a.dot(b) #向量内积
(108, 108)
np.dot(a,b) #向量内积
108
c = np.array(([1,2,3],[4,5,6],[7,8,9]))
cT=c.T
c.dot(a)
array([ 38,  92, 146])
c[0].dot(a)
38
c[1].dot(a)
92
a.dot(cT[2])
114

6.数组元素访问

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

多元素同时访问

x=np.arange(0,100,10)
x
array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])
index = np.random.randint(1,len(x),5)
index
array([6, 6, 2, 3, 7])
x[index]
array([60, 60, 20, 30, 70])
x[index] = [1,2,3,4,5]  #同时修改多个元素的值
x
array([ 0, 10,  3,  4, 40, 50,  2,  5, 80, 90])
x[[1,2,3]]  #同时访问多个元素的值
array([10,  3,  4])

7.对数组进行函数运算

x=np.arange(0,100,10)
np.sin(x)  #一维数组中所有元素求正弦值
array([ 0.        , -0.54402111,  0.91294525, -0.98803162,  0.74511316,
       -0.26237485, -0.30481062,  0.77389068, -0.99388865,  0.89399666])
b=np.array(([1,2,3],[4,5,6],[7,8,9]))
np.cos(b)
array([[ 0.54030231, -0.41614684, -0.9899925 ],
       [-0.65364362,  0.28366219,  0.96017029],
       [ 0.75390225, -0.14550003, -0.91113026]])
np.round(np.cos(b)) #四舍五入
array([[ 1., -0., -1.],
       [-1.,  0.,  1.],
       [ 1., -0., -1.]])
x=np.random.rand(10)
x*=10
x
array([0.72528784, 7.46094155, 0.94747503, 2.10896222, 9.50620225,
       2.64778271, 0.68896693, 1.19711742, 7.17753355, 0.93906123])
np.floor(x) #向下取整
array([0., 7., 0., 2., 9., 2., 0., 1., 7., 0.])
np.ceil(x) #向上取整
array([ 1.,  8.,  1.,  3., 10.,  3.,  1.,  2.,  8.,  1.])

8. 对矩阵不同维度上的元素进行计算

x=np.arange(0,10).reshape(2,5) #创建二维数组
x
array([[0, 1, 2, 3, 4],
       [5, 6, 7, 8, 9]])
np.sum(x) #求和
45
np.sum(x,axis = 0)# 纵向求和
array([ 5,  7,  9, 11, 13])
np.sum(x,axis = 1) #横向求和
array([10, 35])
np.mean(x,axis = 0) #纵向求算术平均值
array([2.5, 3.5, 4.5, 5.5, 6.5])
np.mean(x,axis = 1) #横向求算术平均值
array([2., 7.])
weight = [0.3,0.7] #权重
np.average(x,axis = 0,weights = weight) # 二维数组纵向计算加权平均值
array([3.5, 4.5, 5.5, 6.5, 7.5])
np.max(x)
9
np.max(x,axis = 0)  #纵向求最大值,即每列的最大值
array([5, 6, 7, 8, 9])
x=np.random.randint(1,10,size=(3,3))
x
array([[8, 1, 6],
       [1, 4, 1],
       [8, 7, 9]])
np.std(x) #求所有元素的标准差
3.1269438398822866
np.std(x,axis=1) #横向求标准差  即每行元素的标准差
array([2.94392029, 1.41421356, 0.81649658])
np.var(x,axis = 0) #纵向求方差  即每列元素的方差
array([10.88888889,  6.        , 10.88888889])
np.sort(x,axis = 0) #纵向排列 从小到大
array([[1, 1, 1],
       [8, 4, 6],
       [8, 7, 9]])

9. 改变数组大小

a=np.arange(1,11,1)
a
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])
a.shape = 2,5  #改为两行五列
a
array([[ 1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10]])
a.shape=5,-1  # -1表示自动计算
a
array([[ 1,  2],
       [ 3,  4],
       [ 5,  6],
       [ 7,  8],
       [ 9, 10]])
b=a.reshape(2,5) #reshape()方式返回新数组
b
array([[ 1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10]])

10.切片操作

a=np.arange(10)
a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
a[::-1] #反向切片
array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
a[::2] #隔一个取一个元素
array([0, 2, 4, 6, 8])
a[:5] #前五个元素
array([0, 1, 2, 3, 4])
c=np.arange(25)
c.shape=5,5
c
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]])
c[0,2:5]  #第0行中下标[2,5)之间的元素
array([2, 3, 4])
c[1]  #第0行中所有元素
array([5, 6, 7, 8, 9])
c[2:5,2:5] #行下标和列下标都结语[2,5)之间的元素值
array([[12, 13, 14],
       [17, 18, 19],
       [22, 23, 24]])

11.布尔运算

x=np.random.rand(10) #10个数的随机数组
x
array([0.66334709, 0.82328621, 0.41857429, 0.28620644, 0.26740633,
       0.95842834, 0.94531951, 0.6467254 , 0.41522248, 0.64909167])
x>0.5 #比较数组中每个元素值是否大于0.5
array([ True,  True, False, False, False,  True,  True,  True, False,
        True])
x[x>0.5] #获取数组中大于0.5的元素
array([0.66334709, 0.82328621, 0.95842834, 0.94531951, 0.6467254 ,
       0.64909167])
a=np.array([1,2,3])
b=np.array([3,2,1])
a>b  #对应位置上元素比较大小
array([False, False,  True])
a[a>b]
array([3])
a ==b
array([False,  True, False])
a[a==b]
array([2])

12.广播

a = np.arange(0,60,10).reshape(-1,1)  #列向量, -1表示自动计算
a
array([[ 0],
       [10],
       [20],
       [30],
       [40],
       [50]])
b=np.arange(0,6)
b
array([0, 1, 2, 3, 4, 5])
a+b    #广播 
array([[ 0,  1,  2,  3,  4,  5],
       [10, 11, 12, 13, 14, 15],
       [20, 21, 22, 23, 24, 25],
       [30, 31, 32, 33, 34, 35],
       [40, 41, 42, 43, 44, 45],
       [50, 51, 52, 53, 54, 55]])
a*b
array([[  0,   0,   0,   0,   0,   0],
       [  0,  10,  20,  30,  40,  50],
       [  0,  20,  40,  60,  80, 100],
       [  0,  30,  60,  90, 120, 150],
       [  0,  40,  80, 120, 160, 200],
       [  0,  50, 100, 150, 200, 250]])

13.分段函数

x=np.arange(10)
x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.where(x<5,0,1)  # 小于5的元素值对应0,其他对应1
array([0, 0, 0, 0, 0, 1, 1, 1, 1, 1])
np.piecewise(x,[x<4,x>7],[lambda x:x*2,lambda x:x*3])  #满足小于4大于7的数字乘以3,其他乘以2
array([ 0,  2,  4,  6,  0,  0,  0,  0, 24, 27])

14.计算唯一值以及出现次数

x= np.random.randint(0,10,7)
x
array([3, 5, 7, 6, 4, 2, 7])
a=np.bincount(x)#元素出现的次数, 这个不太好讲 忘了的话查一下bincount()
a
array([0, 0, 1, 1, 1, 1, 1, 2], dtype=int64)
np.sum(a) # 所有元素出现次数之和等于数组长度
7
len(x)
7
np.unique(x) #返回唯一元素值
array([2, 3, 4, 5, 6, 7])
x=np.random.randint(0,10,10)
x
array([5, 3, 7, 5, 7, 6, 1, 4, 8, 8])
y = np.random.rand(10)  #随机小数,模拟权重
y = np.round_(y,1) #保留一位小数
y
array([0.2, 0.3, 0.7, 0.9, 0.3, 0.2, 0.4, 0.2, 0. , 0.2])
np.sum(x*y)/np.sum(np.bincount(x)) #加权总和/出现总次数或元素个数
1.7399999999999998

15.矩阵运算

a_list=[3,5,7]
a_mat=np.matrix(a_list)
a_mat
matrix([[3, 5, 7]])
a_mat.T
matrix([[3],
        [5],
        [7]])
a_mat.shape #矩阵形状
(1, 3)
a_mat.size
3
b_mat=np.matrix((1,2,3))
b_mat
matrix([[1, 2, 3]])
a_mat * b_mat.T # 矩阵相乘
matrix([[34]])
a_mat.mean() #元素平均值
5.0
a_mat.sum() #求和
15
a_mat.max()
7
c_mat=np.matrix([[1,5,3],[2,9,6]]) #创建二维矩阵
c_mat
matrix([[1, 5, 3],
        [2, 9, 6]])
c_mat.argsort(axis =0) #纵向排序后的元素序号
matrix([[0, 0, 0],
        [1, 1, 1]], dtype=int64)
c_mat.argsort(axis = 1) #横向排序后的元素序号
matrix([[0, 2, 1],
        [0, 2, 1]], dtype=int64)
d_mat=np.matrix([[1,2,3],[4,5,6],[7,8,9]])
d_mat
matrix([[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]])
d_mat.diagonal()  #对角线元素
matrix([[1, 5, 9]])
d_mat.flatten()  #矩阵平铺
matrix([[1, 2, 3, 4, 5, 6, 7, 8, 9]])

`

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NumPy是一个功能强大的Python库,主要用于对多维数组执行计算。它的使用可以使代码更简洁,并且具有一些特性,如向量化操作,可以加速计算过程。在NumPy中,最重要的数据结构是NumPy数组,它可以通过不同的方法进行创建。 创建一维NumPy数组的常见方法有以下几种: 1. 使用np.array()函数,传入一个列表作为参数,例如: my_array = np.array([1, 2, 3, 4, 5]) 2. 使用np.array()函数,传入一个元组作为参数,例如: my_array2 = np.array((0, 1, 2, 3, 4)) 3. 使用np.arange()函数,该函数类似于内置函数range(),返回一个数组而不是列表,例如: my_array3 = np.arange(5) 4. 使用np.linspace()函数,该函数返回一个包含指定数量元素的数组,而不是指定步长(step),例如: my_array4 = np.linspace(0, 2*np.pi, 5) 这些方法可以用来创建不同类型的一维NumPy数组。通过打印数组可以查看创建的结果。在使用NumPy之前,需要导入NumPy库,可以使用import numpy as np语句进行导入。 NumPy还可以用于执行各种数学任务,如数值积分、微分、内插、外推等,以及快速处理图像等。因此,在机器学习中,NumPy常被用于存储训练数据和机器学习模型的参数,以及进行简单和快速的计算。 总结起来,NumPy提供了丰富的功能和优秀的库函数,使得在Python中进行数值计算变得更加方便和高效。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [python科学计算的基本包-Python科学计算基本包Numpy使用的教程.pdf](https://download.csdn.net/download/qq_43934844/87898289)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [numpy基础语法整理](https://blog.csdn.net/weixin_61890283/article/details/124596265)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值