文章目录

  • NumPy科学计算库
    • 0 准备
      • 安装python库
      • jupyter 启动:jupyter notebook
      • jupyter扩展插件
    • 1 基本操作
      • 1.1 数组创建
      • 1.2 查看属性
      • 1.3 文件操作
        • 存储
        • 读取
        • 读写csv、txt
    • 2 数据类型
    • 3 数组运算
      • 基本运算
      • 逻辑运算
      • 数组与标量计算
    • 4 复制和视图
      • 完全没有复制
      • 浅拷贝
      • 深拷贝
    • 5 索引、切片和迭代
      • 5.1 基本索引和切片
      • 5.2 boolean值索引
    • 6 形状操作
      • 数组变形
      • 数组转置
      • 数组堆叠
      • split数组拆分
    • 7 广播机制
      • 一维数组广播
      • ⼆维数组的广播
      • 三维数组广播
    • 8 通用函数
      • 8.1 元素级数字函数
      • 8.2 where函数
      • 8.3 排序方法
      • 8.4 集合运算函数
      • 8.5 数学和统计函数
    • 9 线性代数
      • 9.1 矩阵乘积
      • 9.2 矩阵其他计算

NumPy科学计算库

0 准备

文档参考:https://www.numpy.org.cn/

安装python库

  • pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple

  • pip install jupyter -i https://pypi.tuna.tsinghua.edu.cn/simple

jupyter 启动:jupyter notebook

jupyter扩展插件

  • pip install jupyter_contrib_nbextensions -i https://pypi.tuna.tsinghua.edu.cn/simple
  • pip install jupyter_nbextensions_configurator -i https://pypi.tuna.tsinghua.edu.cn/simple
  • jupyter contrib nbextension install --user
  • jupyter nbextensions_configurator enable --user

1 基本操作

1.1 数组创建

# 将列表转为NumPy数组
l = [1,2,3,4,5]
arr = np.array(l)# 生成int随机数
arr6 = np.random.randint(0,100,size = 10)
arr6# 生成正态分布数
arr7 = np.random.randn(5)
arr7

1.2 查看属性

arr = np.random.randint(0,100,size = (3,4,5))
display(arr)
print("数组的维度:", arr.ndim)
print("数组的形状:", arr.shape)
print("数组元素的总数:", arr.size)
print("数据类型:", arr.dtype)
print("数组总每个元素的大小:", arr.itemsize)

1.3 文件操作

存储
x = np.random.randn(5)
y = np.arange(0,10,1)
# save⽅法可以存⼀个ndarray
np.save("x_arr",x)
# 如果要存多个数组,要是⽤savez⽅法,保存时以key-value形式保存,key任意(xarr、yarr)
np.savez("some_array.npz",xarr = x,yarr=y)
读取
# 直接加载
np.load('x_arr.npy')
# 通过key获取保存的数组数据
np.load('some_array.npz')['yarr']
读写csv、txt
arr = np.random.randint(0,10,size = (3,4))
# 储存数组到txt⽂件
np.savetxt("arr.csv",arr,delimiter=',') # ⽂件后缀是txt也是⼀样的
# 读取txt⽂件,delimiter为分隔符,dtype为数据类型
np.loadtxt("arr.csv",delimiter=',',dtype=np.int32)

2 数据类型

ndarray数据类型

  • int : int8、uint8、int16、int32、int64
  • float: float16、float32、float64
  • str
# 创建时指定数据类型
np.array([1,2,5,8,2],dtype = 'float32')# asarray转换时指定
arr = [1,3,5,7,2,9,0]
np.asarray(arr,dtype = 'float32')# 数据类型转换astype
arr = np.random.randint(0,10,size = 5,dtype = 'int16')
arr.astype('float32') # 输出:array([1., 4., 0., 6., 6.], dtype=float32)

3 数组运算

基本运算
arr1 = np.array([1,2,3,4,5])
arr2 = np.array([2,3,1,5,9])
arr1 + arr2 # +
arr1 - arr2 # 减法
arr1 * arr2 # 乘法
arr1 / arr2 # 除法
arr1 ** arr2 # 两个星号表示幂运算
逻辑运算
arr1 < 5
arr1 >= 5
arr1 == 5
arr1 == arr2
arr1 > arr2
数组与标量计算
arr = np.arange(1,10)
1/arr
arr+5
arr*5

4 复制和视图

完全没有复制
a = np.random.randint(0,100,size = (4,5))
b = a
a is b # 返回True a和b是两个不同名字对应同⼀个内存对象
b[0,0] = 1024 # 命运共同体
display(a,b)
浅拷贝
a = np.random.randint(0,100,size = (4,5))
b = a.view() # 使⽤a中的数据创建⼀个新数组对象
a is b # 返回False a和b是两个不同名字对应同⼀个内存对象
b.base is a # 返回True,b视图的根数据和a⼀样
b.flags.owndata # 返回False b中的数据不是其⾃⼰的
a.flags.owndata # 返回True a中的数据是其⾃⼰的
b[0,0] = 1024 # a和b的数据都发⽣改变
display(a,b)
深拷贝
import numpy as np
a = np.random.randint(0,100,size = (4,5))
b = a.copy()
b is a # 返回False
b.base is a # 返回False
b.flags.owndata # 返回True
a.flags.owndata # 返回True
b[0,0] = 1024 # b改变,a不变,分道扬镳
display(a,b)

5 索引、切片和迭代

5.1 基本索引和切片

arr = np.array([0,1,2,3,4,5,6,7,8,9])
arr[5] #索引 输出 5
arr[5:8] #切⽚输出:array([5, 6, 7])
arr[2::2] # 从索引2开始每两个中取⼀个 输出 array([2, 4, 6, 8])
arr[::3] # 不写索引默认从0开始,每3个中取⼀个 输出为 array([0, 3, 6, 9])
arr[1:7:2] # 从索引1开始到索引7结束,左闭右开,每2个数中取⼀个 输出 array([1, 3, 5])
arr[::-1] # 倒序 输出 array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
arr[::-2] # 倒序 每两个取⼀个 输出 array([9, 7, 5, 3, 1])
arr[5:8]=12 # 切⽚赋值会赋值到每个元素上,与列表操作不同
temp = arr[5:8]
temp[1] = 1024
arr # 输出:array([ 0, 1, 2, 3, 4, 12, 1024, 12, 8, 9])

5.2 boolean值索引

names = np.array(['softpo','Brandon','Will','Michael','Will','Ella','Daniel','softpo','
Will','Brandon'])
cond1 = names == 'Will'
cond1
# 输出array([False, False, True, False, True, False, False, False, True,
False])
names[cond1] # array(['Will', 'Will', 'Will'], dtype='<U7')
arr = np.random.randint(0,100,size = (10,8)) # 0~100随机数
cond2 = arr > 90
# 找到所有⼤于90的索引,返回boolean类型的数组 shape(10,8),⼤于返回True,否则False
arr[cond2] # 返回数据全部是⼤于90的

6 形状操作

数组变形
arr1 = np.random.randint(0,10,size = (3,4,5))
arr2 = arr1.reshape(12,5) # 形状改变,返回新数组
arr3 = arr1.reshape(-1,5) # ⾃动“整形”,⾃动计算
数组转置
arr1 = np.random.randint(0,10,size = (3,5)) # shape(3,5)
arr1.T # shape(5,3) 转置
arr2 = np.random.randint(0,10,size = (3,6,4)) # shape(3,6,4)
np.transpose(arr2,axes=(2,0,1)) # transpose改变数组维度 shape(4,3,6)
数组堆叠
import numpy as np
arr1 = np.array([[1,2,3]])
arr2 = np.array([[4,5,6]])
np.concatenate([arr1,arr2],axis = 0)
# 串联合并shape(2,3) axis = 0表示第⼀维串联 输出为
# array([[1, 2, 3],
# [4, 5, 6]])
np.concatenate([arr1,arr2],axis = 1)
# shape(1,6) axis = 1表示第⼆维串联 输出为:array([[1, 2, 3, 4, 5, 6]])
np.hstack((arr1,arr2)) # ⽔平⽅向堆叠 输出为:array([[1, 2, 3, 4, 5, 6]])
np.vstack((arr1,arr2))
# 竖直⽅向堆叠,输出为:
# array([[1, 2, 3],
# [4, 5, 6]])
split数组拆分
arr = np.random.randint(0,10,size = (6,5)) # shape(6,5)
np.split(arr,indices_or_sections=2,axis = 0) # 在第⼀维(6)平均分成两份
np.split(arr,indices_or_sections=[2,3],axis = 1) # 在第⼆维(5)以索引2,3为断点分割
成3份
np.vsplit(arr,indices_or_sections=3) # 在竖直⽅向平均分割成3份
np.hsplit(arr,indices_or_sections=[1,4]) # 在⽔平⽅向,以索引1,4为断点分割成3份

7 广播机制

当两个数组的形状并不相同的时候,我们可以通过扩展数组的⽅法来实现相加、相减、相乘等操作,这种机制叫做⼴播(broadcasting)

一维数组广播
arr1 = np.sort(np.array([0,1,2,3]*3)).reshape(4,3) #shape(4,3)
arr2 = np.array([1,2,3]) # shape(3,)
arr3 = arr1 + arr2 # arr2进⾏⼴播复制4份 shape(4,3)
⼆维数组的广播
arr1 = np.sort(np.array([0,1,2,3]*3)).reshape(4,3) # shape(4,3)
arr2 = np.array([[1],[2],[3],[4]]) # shape(4,1)
arr3 = arr1 + arr2 # arr2 进⾏⼴播复制3份 shape(4,3)
三维数组广播
arr1 = np.array([0,1,2,3,4,5,6,7]*3).reshape(3,4,2) #shape(3,4,2)
arr2 = np.array([0,1,2,3,4,5,6,7]).reshape(4,2) #shape(4,2)
arr3 = arr1 + arr2 # arr2数组在0维上复制3份 shape(3,4,2)

8 通用函数

8.1 元素级数字函数

abs、sqrt、square、exp、log、sin、cos、tan,maxinmum、minimum、all、any、inner、clip、
round、trace、ceil、floor

arr1 = np.array([1,4,8,9,16,25])
np.sqrt(arr1) # 开平⽅
np.square(arr1) # 平⽅
np.clip(arr1,2,16) # 输出 array([ 2, 4, 8, 9, 16, 16])
x = np.array([1,5,2,9,3,6,8])
y = np.array([2,4,3,7,1,9,0])
np.maximum(x,y) # 返回两个数组中的⽐较⼤的值
arr2 = np.random.randint(0,10,size = (5,5))
np.inner(arr2[0],arr2) #返回⼀维数组向量内积

8.2 where函数

where 函数,三个参数,条件为真时选择值的数组,条件为假时选择值的数组

arr1 = np.array([1,3,5,7,9])
arr2 = np.array([2,4,6,8,10])
cond = np.array([True,False,True,True,False])
np.where(cond,arr1,arr2) # True选择arr1,False选择arr2的值
# 输出 array([ 1, 4, 5, 7, 10])
arr3 = np.random.randint(0,30,size = 20)
np.where(arr3 < 15,arr3,-15) # ⼩于15还是⾃身的值,⼤于15设置成-15

8.3 排序方法

直接改变原数组

arr = np.array([9,3,11,6,17,5,4,15,1])
arr.sort() # 直接改变原数组
np.sort(arr) # 返回深拷⻉排序结果
arr = np.array([9,3,11,6,17,5,4,15,1])
arr.argsort() # 返回从⼩到⼤排序索引 array([8, 1, 6, 5, 3, 0, 2, 7, 4])

8.4 集合运算函数

A = np.array([2,4,6,8])
B = np.array([3,4,5,6])
np.intersect1d(A,B) # 交集 array([4, 6])
np.union1d(A,B) # 并集 array([2, 3, 4, 5, 6, 8])
np.setdiff1d(A,B) #差集,A中有,B中没有 array([2, 8])

8.5 数学和统计函数

min、max、mean、median、sum、std、var、cumsum、cumprod、argmin、argmax、
argwhere、cov、corrcoef

arr1 = np.array([1,7,2,19,23,0,88,11,6,11])
arr1.min() # 计算最⼩值 0
arr1.argmax() # 计算最⼤值的索引 返回 6
np.argwhere(arr1 > 20) # 返回⼤于20的元素的索引
np.cumsum(arr1) # 计算累加和
arr2 = np.random.randint(0,10,size = (4,5))
arr2.mean(axis = 0) # 计算列的平均值
arr2.mean(axis = 1) # 计算⾏的平均值
np.cov(arr2,rowvar=True) # 协⽅差矩阵
np.corrcoef(arr2,rowvar=True) # 相关性系数

9 线性代数

9.1 矩阵乘积

#矩阵的乘积
A = np.array([[4,2,3],[1,3,1]]) # shape(2,3)
B = np.array([[2,7],[-5,-7],[9,3]]) # shape(3,2)
np.dot(A,B) # 矩阵运算 A的最后⼀维和B的第⼀维必须⼀致
A @ B # 符号 @ 表示矩阵乘积运算

9.2 矩阵其他计算

下⾯可以计算矩阵的逆、⾏列式、特征值和特征向量、qr分解值,svd分解值

#计算矩阵的逆
from numpy.linalg import inv,det,eig,qr,svd
A = np.array([[1,2,3],[2,3,4],[4,5,8]]) # shape(3,3)
inv(t) # 逆矩阵
det(t)#计算矩阵⾏列式

NumPy科学计算库-学习笔记相关推荐

  1. 科学计算库学习笔记(持续更新)

    文章目录 数据处理与分析学习的思想与流程 科学计算库的主要数据结构 dataframe dataframe的创建 datetime和str 数据处理的流程 数据的导入 数据的预处理(数据清理) 重复值 ...

  2. MOOC网神经网络与深度学习TensorFlow实践2——numpy科学计算库、matplotlib

    numpy科学计算库 只打乱第一维的数据: Matplotlib 散点图 折线图和柱状图 波士顿房价数据集可视化 鸢尾花数据集可视化

  3. 神经网络与深度学习——TensorFlow2.0实战(笔记)(五)(NumPy科学计算库<1>python)

    多维数组 形状(Shape): 是一个元组,描述数组的维度,以及各个维度的长度. 长度(Length): 某个维度中的元素个数. 数字 单门课程成绩 1*课程成绩 一维数组 多门课程成绩 n*课程成绩 ...

  4. python【Numpy科学计算库】Numpy的超实用基础详细教程(看不懂你来打我)

    文章目录 Numpy简单介绍 1.Numpy是什么 2. 多维数组 numpy数据类型设定与转换 numpy索引与切片 多维数组索引.切片 数组文件输入输出 使用numpy.arange方法 使用nu ...

  5. 神经网络与深度学习——TensorFlow2.0实战(笔记)(五)(NumPy科学计算库<2>python)

    数组元素的切片 一维数组 #一维数组 #切片方法和Python序列数据结构的切片一样 a=np.array([0,1,2,3,4],dtype=np.int64)#占用新的内存 #不包括结束位置 pr ...

  6. 【学习笔记】Numpy科学计算库基础学习

    01 Numpy属性 Numpy常用于矩阵的运算 np.array()定义array矩阵 array.ndim矩阵的维度 array.shape矩阵的形状 array.size矩阵的大小 array. ...

  7. 神经网络与深度学习——TensorFlow2.0实战(笔记)(五)(NumPy科学计算库<矩阵和随机数>python)

    矩阵和随机数 矩阵 创建矩阵 #创建矩阵 astring = np.mat("1 2 3; 4 5 6") alist = [[1,2,3],[4,5,6]] anplist = ...

  8. NumPy科学计算库(1)Python数据分析

    1 NumPy简介  简单来说NumPy的功能就是就是对可以一个数值集合(eg:数组)进行各种各样的操作.  NumPy(Numerical Python)是Python的一种开源的数值计算扩展.提供 ...

  9. python【Numpy科学计算库】连女朋友都会用的Numpy(真の能看懂~!)

    文章目录 1 Numpy属性 2 Numpy的创建array 3 Numpy 基础运算1 4 Numpy 基础运算2 5 Numpy索引 6 Numpy array合并 7 Numpy array分割 ...

最新文章

  1. 检测用户是允许还是拒绝使用摄像头.
  2. 第十八课.动态图模型
  3. Actor-critic强化学习方法应用于CartPole-v1
  4. css 浮动在最上层_CSS的“层”峦“叠”翠
  5. java se 开发web程序_JDiy快速开发WEB之javaSE环境搭建-初级
  6. java 中以||作为split分隔符正确的写法
  7. php simplexmlelement array,php中SimpleXMLElement 对象转换为数组
  8. 判断一个整数的奇偶性php,【算法】- 判断一个整数是否是奇数
  9. android 按下缩小效果松开恢复_22省份三季报:粤苏总量差距缩小,19省份实现正增长...
  10. FFmpeg将MP4视频切割成ts文件
  11. 人工智能产业链,是时候梳理一下了!
  12. dw html 浮动窗口,Dreamweaver怎样实现飘浮光球特效
  13. PDF如何修改文件字体大小
  14. 首个6G白皮书发布,6G长啥样?
  15. 使用adb从手机拉取apk包
  16. [算法]声音数据处理
  17. 神舟微型计算机m mipc2D1,悲剧,我真的无可奈何了,神舟--鄙视你!!!
  18. Apache Ranger原理与应用实践
  19. NES —— Go 语言开发的任天堂游戏模拟器
  20. C++实现简易(多人弹幕控制主播游戏人物类型,CMD_迷宫小游戏)(一)

热门文章

  1. 大数据之数据仓库建设(二)
  2. 群晖开启root权限及修复Moments的AI人像服务
  3. 带你一起Piu Piu Piu
  4. LinkedIn动态如何发布,效果更好?更好的发挥领英功效
  5. Monty Hall Problem
  6. 【GDOI2016】疯狂动物城 题解
  7. k8s 拉取镜像失败_Kubernetes:如何解决从k8s.gcr.io拉取镜像失败问题
  8. 您的证书可以申请个人所得税的退税么?
  9. java 判断文件名合法_java用正则方法验证文件名是否合法
  10. 电子电气架构车载网关系列——网关主要应用场景及相关要求