Numpy的使用


前言

首先需要提前引入Numpy库
import numpy as np


一、基本用法

1.数组的创建

数组创建有:np.array()、np.arange()、np.linspace()、np.logspace()、np.zeros()、np.ones()、np.eye()、np.diag()这八种常用方式。


array()方式

arr1 = np.array([1,2,4,6,9])
arr2 = np.array([-9,3,49,5],dtype = 'str')
#浮点数型
arr2 = np.array([-9,3,49,5],dtype = 'float')
#二维数组,嵌套列表/元组方式
arr3 = np.array([[1,2,3],[55,8,7],[4,6,8]])

arange()方式

#左开右闭,取不到10,步长0.3
np.arange(0,10,0.3)

在这里插入图片描述
linspace()方式
产生一个等差数列

#等差数列,初始值为1,终止值为10,总共有10个数的等差数列,步长其自己计算
np.linspace(1,10,10)

在这里插入图片描述

#最后一个值不取到(产生11个等差数列,扔掉最后一个)
np.linspace(1,10,10,endpoint = False)

在这里插入图片描述
logspace()方式
产生等比数列

#等比数列。先产生一个等差数列,再以2最为底
np.logspace(1,5,base=2,num=10)

2 ** np.linspace(1,5,10)结果一样
在这里插入图片描述
产生矩阵
产生0矩阵:np.zeros([4,5])#全是0的矩阵,4行5列
产生单位矩阵:np.ones([6,7])#全1矩阵,6行7列
产生只有对角线有值的矩阵:np.eye(6)#6行6列,对角线为1
在这里插入图片描述
对角线指定值:np.diag([4,5,8])
在这里插入图片描述
当然,这些都可以直接加数字,例如+1:
在这里插入图片描述

2.数组的属性

查看数组的维数:.ndim
在这里插入图片描述
查看数组有几行几列:.shape
在这里插入图片描述
查看数组总共有多少元素:.size
在这里插入图片描述
查看数组的数据类型:.dtype
在这里插入图片描述

3.索引和切片

即 按照需求取数组

arr = np.arange(1,10)
arr[0]#取第一位
arr[-1]#取最后一位
arr[3:5]#注意是左开右闭的
arr[::-3]#倒序,取到倒数的第三位,结果是array([9,6,3])
arr[-4:-2]#从倒数第四位,还是右边取不到,结果6,7

如果把数组直接赋给另一个,那么新数组的改变将导致原数组的改变:
在这里插入图片描述
但是很多时候我们不希望原数组发生改变,故使用.copy()方法
在这里插入图片描述
在这里插入图片描述
发现原数组不改变了。

二、二维数组

1.二维数组的学习

也可以先定义数据再创建数组

data2 = ((8,7,6,5,4,5),(4,5,6,7,9,7),(3,4,5,6,8,6))
arr2 = np.array(data2)

索引

arr2[2]#第三行
#第三行第二列
arr2[2,1]
arr2[2][1]

arr2[:,2:4]#行不做限制,取第二列和第三列
arr2[1:3]#第二行到第3行
arr2[arr2>5]#找满足条件的,注意然后就变成一维数组了

在这里插入图片描述
查看对条件的满足情况:
在这里插入图片描述
在这里插入图片描述

2.花式索引

arr2[[2,1]]#曲第三行和第二行,以列表形式
arr2[[2,1],[0,1]]#第3行第1列的元素和第2行第2列的元素
arr2[:,[3,1]]#对行数不做限制,要第四列和第二列,循序也是4,2
arr2[:,1]#一维输出
arr2[:,[1]]#二维输出

arr2[np.ix_([0,-1],[0,2,1])]
np.ix_([0,-1],[0,2,1])#第一行和最后一行,第一列,第三列和第二列
arr2[[0,-1]][:,[0,1,3]]

在这里插入图片描述
一维输出的情况
在这里插入图片描述
二维的情况
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、Numpy的高级用用法

1.数组形状改变

reshape()
reshape 改变数组的形状但是不改变数据的值
原数组arr2为3行6列的二维数组
在这里插入图片描述
改变形状也只能在行列相乘=18的基础上改变

arr2.reshape(6,3)

在这里插入图片描述
但是原数组没有改变
在这里插入图片描述
.ravel()
把数组将为一维数组,可以是横着降也可以是竖着降

arr2.ravel()

在这里插入图片描述
在这里插入图片描述

arr2.ravel(order = 'F')#竖着来降为1维

在这里插入图片描述

在这里插入图片描述
同样也都不改变原数组
.flatten()
用法和.ravel()一样
都可以arr2.flatten()[1]这种形式索引


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210124170058455.png)

2.数组的ufunc广播机制

在这里插入图片描述
创建两个新的数组:
在这里插入图片描述
在这里插入图片描述

数组合并

#横向合并,要求行数一样
np.hstack((arr1,arr2))
np.concatenate((arr1,arr3),axis=1)#沿着列的方向操作—,axis=0沿着行的方向操纵|

在这里插入图片描述
在这里插入图片描述

#纵向合并,要求列数一样,行数没关系
np.vstack((arr1,arr3))
#或者
np.concatenate((arr1,arr3),axis=0)

在这里插入图片描述
在这里插入图片描述
复制:

arr4 = np.array([[0,1],[4,3]])
#复制4次,沿着行的方向复制1次,沿着列方向复制10次
np.tile(arr4,(1,10))

在这里插入图片描述
广播机制
要么行数相等要么列数相等
在这里插入图片描述
创建二维数组arr5
在这里插入图片描述

arr1+arr5
arr1-arr5

在这里插入图片描述
是自动把剩余的列给补齐了在相加的。
或者使用函数:

np.add()#把两个数组进行加和,仅支持两个数组,多了的话:
np.add(arr1,np.add(arr2,arr3))
np.subtract(arr1,arr5)#减法运算
np.power(arr1,3)#arr1的三次方

效果都是一样的
乘除也是这么使用。* /

去重,比较运算

s = np.array([1,2,3,4,3,1,2,2,4,6,7,2,4,8,4,5])
test = [2,4,6]
np.unique(s)#去重的
np.in1d(s,test)#s的每个元素是否在test里面,in1d,不是inld
np.intersect1d(test,s)#∩交集
# 比较运算
arr1 = np.array([[0,20,4],[4,5,66],[4,5,60],[55,22,45]])
arr2 = np.array([1,23,4])
# =
arr1 == arr2
np.equal(arr1,arr2)
#>
np.greater(arr1,arr2)
arr1 > arr2
# 逻辑运算
np.greater(arr1,arr2).any()#只要有一个为真就返回真
np.greater(arr1,arr2).all()#所有都为真才返回真

3.排序与搜索

排序

np.sort(s)#返回的是排序完的结果

sorted(s)#返回列表

在这里插入图片描述
在这里插入图片描述
升序降序排序
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值