附录2:Numpy实例记录
使用Numpy是为了让数组的处理更高效,Numpy高效的原因在于操作并行,比如arrayX10的广播,不会一个一个去X10,而是一组一组的并行执行,numpy的实现涉及到硬件的管理;
另外,Numpy兼容性很好,接收一切可遍历对象
基本操作
import numpy as np
data=np.array([1,2,3,4,5])
print(data[::-1])#[5 4 3 2 1]arr=np.arange(6).reshape(3,2)
"""
array([[0, 1],[2, 3],[4, 5]])
"""
arr[1,1]
#等价于
arr[1][1]#关于ndarray.reshape
arr=np.random.randn(6,3)
arr.reshape(-1,2)
#等价于arr.reshape([9,2])
#和arr.reshape((-1,2))
#arr.reshape([-1,2])
arr=np.empty((8, 4))
print(arr)
for i in range(8):arr[i] = i
print(arr)
print(arr[[4,3]]) # 选择指定的行
arr = np.arange(32).reshape((8, 4)) # 重新调整数组形状
print(arr)
print(arr[[1, 5, 7, 2], [0, 3, 1, 2]]) # 实际选取的是[1, 0],[5, 3],[7, 1],[2, 2]
#等价于
print(np.array([arr[1,0],arr[5,3],arr[7,1],arr[2,2]]))arr[1:4, 0:2]#左闭右开"""
[[0. 0. 0. 0.][1. 1. 1. 1.][2. 2. 2. 2.][3. 3. 3. 3.][4. 4. 4. 4.][5. 5. 5. 5.][6. 6. 6. 6.][7. 7. 7. 7.]]
[[0. 0. 0. 0.][1. 1. 1. 1.][2. 2. 2. 2.][3. 3. 3. 3.][4. 4. 4. 4.][5. 5. 5. 5.][6. 6. 6. 6.][7. 7. 7. 7.]]
[[4. 4. 4. 4.][3. 3. 3. 3.]]
[[ 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 25 26 27][28 29 30 31]]
[ 4 23 29 10]
[ 4 23 29 10]
"""
# 快速数据检索
names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
data = np.random.randn(7, 4)#生成标准正态分布
print(names)
print(data)
print(names == 'Bob') # 返回布尔数组
print(data[names == 'Bob']) # 布尔数组的值匹配每一行,True则选取,False则扔掉。
print(data[names == 'Bob', 2:]) # 切片:左闭右开
mask = (names == 'Bob') | (names == 'Will') # 条件混合,取或
print(data[mask])
data[names == 'Bob'] = -1 #广播赋值
print(data)"""
['Bob' 'Joe' 'Will' 'Bob' 'Will' 'Joe' 'Joe']
[[-0.49658628 -0.18271861 0.14169803 0.19339167][ 0.21527264 0.61966656 -0.62114083 1.32643899][ 1.47913595 -0.69193664 0.38539048 -0.67995962][-1.23599738 1.02333909 0.55957597 -1.06472669][ 0.30070514 -0.91169445 -0.17996203 -1.25359602][ 0.6766203 0.28427213 -0.48749165 -0.01544164][-0.85773111 0.74483556 0.68253804 -0.01523486]]
[ True False False True False False False]
[[-0.49658628 -0.18271861 0.14169803 0.19339167][-1.23599738 1.02333909 0.55957597 -1.06472669]]
[[ 0.14169803 0.19339167][ 0.55957597 -1.06472669]]
[[-0.49658628 -0.18271861 0.14169803 0.19339167][ 1.47913595 -0.69193664 0.38539048 -0.67995962][-1.23599738 1.02333909 0.55957597 -1.06472669][ 0.30070514 -0.91169445 -0.17996203 -1.25359602]]
[[-1. -1. -1. -1. ][ 0.21527264 0.61966656 -0.62114083 1.32643899][ 1.47913595 -0.69193664 0.38539048 -0.67995962][-1. -1. -1. -1. ][ 0.30070514 -0.91169445 -0.17996203 -1.25359602][ 0.6766203 0.28427213 -0.48749165 -0.01544164][-0.85773111 0.74483556 0.68253804 -0.01523486]]
"""
关于axis
在对张量进行操作时,常常遇到axis问题,一定要用轴去思考,不能停留在习惯的行列,比如对于2维数组(2维张量):
axis=0,0轴沿着行轴的方向竖直操作;
axis=1,1轴沿着列轴的方向水平操作;
当维度上升,轴的操作顺序依次改变,实例如下:
"""
关于axis的解释(不要用行列去思考,应该用轴去思考张量)
对于2维张量:
axis=0,0轴沿着行轴的方向竖直操作
axis=1,1轴沿着列轴的方向水平操作
因此,axis应该沿着轴的方向进行操作注意在np中,一维数组最好不要用行列的习惯去描述:
np.array([1,2,3,4])并不是1行4列
(4,)
np.array([[1,2,3,4],[5,6,7,8]])
(2,4)
"""
arr=np.arange(2*3*4*5).reshape((2,3,4,5))
print(arr)
"""
[[[[ 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][ 25 26 27 28 29][ 30 31 32 33 34][ 35 36 37 38 39]][[ 40 41 42 43 44][ 45 46 47 48 49][ 50 51 52 53 54][ 55 56 57 58 59]]][[[ 60 61 62 63 64][ 65 66 67 68 69][ 70 71 72 73 74][ 75 76 77 78 79]][[ 80 81 82 83 84][ 85 86 87 88 89][ 90 91 92 93 94][ 95 96 97 98 99]][[100 101 102 103 104][105 106 107 108 109][110 111 112 113 114][115 116 117 118 119]]]]
"""
arr.sum(axis=0) # 3*4*5
arr.sum(axis=1) # 2*4*5
arr.sum(axis=2) # 2*3*5
arr.sum(axis=3) # 2*3*4arr.sum(axis=-1) # 2*3*4
数据批量处理
# 数据批量处理
arr = np.random.randn(4, 4)#生成正态分布
print(arr)
print(np.where(arr > 0, 2, -2))#大于0就赋值2,小于0就赋值-2
"""
[[ 0.68372677 -1.86412642 0.58961852 0.32544047][ 0.79565194 1.03966075 -0.85851038 -0.14823294][-0.28363995 -0.68572107 -1.33090292 -3.45833198][-0.70958908 -1.23350697 -2.86709006 -1.42367267]]
[[ 2 -2 2 2][ 2 2 -2 -2][-2 -2 -2 -2][-2 -2 -2 -2]]
"""
线性代数
# 线性代数
x = np.array([[1., 2., 3.], [4., 5., 6.]])
y = np.array([[6., 23.], [-1, 7], [8, 9]])
print(x.dot(y)) # 矩阵乘法from numpy.linalg import inv
x = np.random.randn(5, 5)
print(x.shape)
mat = x.T.dot(x)
mat_i = inv(mat) # inv求逆矩阵
print(mat_i)
print(mat.dot(mat_i)) # 单位矩阵,因为浮点数,所以非对角线元素为非0的非常小的数"""
[[ 28. 64.][ 67. 181.]]
(5, 5)
[[ 0.82446643 0.54581153 -0.44799184 0.09960127 0.02026304][ 0.54581153 0.70515109 -0.30219266 -0.05083933 -0.12622845][-0.44799184 -0.30219266 0.53347673 -0.12813885 -0.09164157][ 0.09960127 -0.05083933 -0.12813885 1.67977712 0.76689927][ 0.02026304 -0.12622845 -0.09164157 0.76689927 0.5405451 ]]
[[ 1.00000000e+00 -3.10430063e-16 -4.57696449e-17 -1.12409918e-17-5.28865495e-18][-2.34822720e-16 1.00000000e+00 -2.72756349e-17 -5.17134869e-173.40743463e-17][ 1.44682430e-16 -1.77238053e-16 1.00000000e+00 1.12559156e-17-7.11535060e-18][-2.84987668e-18 -1.71613757e-16 -3.01336858e-18 1.00000000e+001.60616527e-16][-3.06454112e-17 3.69696345e-16 1.34722500e-17 -3.38788505e-161.00000000e+00]]
"""
统计
# NumPy的数学和统计方法
arr = np.random.randn(5, 4) # 正态分布的数据
print(arr)
print(arr.mean())
print(np.mean(arr))
print(arr.sum()) # 所有数字加起来
print(arr.mean(axis=1)) # 沿着列轴的水平方向操作# 按正态分布生成随机数
samples = np.random.normal(size=(4, 4))
print(samples)"""
[[-0.14999958 -0.19181591 -0.59152312 -1.17662015][-1.68578766 -1.57335795 -0.85423971 1.14586412][ 0.7520616 -1.56075608 -2.41920591 1.01697833][-0.40974949 1.35220199 0.56753759 1.00189374][ 0.91086938 -0.29062086 -0.43625747 0.37066491]]
-0.2110931109294083
-0.2110931109294083
-4.221862218588166
[-0.52748969 -0.7418803 -0.55273051 0.62797096 0.13866399]
[[-0.41304557 -0.68790345 0.23488014 -0.36097226][-1.09859999 0.84048153 0.67562553 1.96591442][-0.24425267 -0.34870918 0.09638551 -0.10508695][-0.78060261 0.99468715 0.79387488 0.09130019]]
"""
附录2:Numpy实例记录相关推荐
- 附录3:Pandas实例记录
Pandas广泛用于数据分析,有两种数据结构:Series和DataFrame,Pandas的操作以列为核心,部分原因在于机器学习的特征以列保存 #Pandas实例记录 #基本数据结构:Series和 ...
- Transformer详细解读与预测实例记录
文章目录 Transformer详细解读与预测实例记录 1.位置编码 1)输入部分: 2)位置编码部分: 2.多头注意力机制 1)基本注意力机制 2)transformer中的注意力 3.残差和Lay ...
- mongodb导出导入实例记录
mongodb导出导入实例记录 平时很用mongodb,所以用到了,就需要去网上搜索方法,干脆将自己的实际经历记录下来,方便日后使用. # 大致需求 源库:db_name_mongo 源IP:192. ...
- Android Studio 学习实例记录-手电筒
Android Studio 学习实例记录-手电筒 刚安装好Android Studio3.1.2,上网搜了一个实例进行实践学习,仅用这篇文章来记录学习过程 MainActivity.java的源码来 ...
- Python numpy使用记录5.生成球面斐波那契网格
Python numpy使用记录5.生成球面斐波那契网格 前言 斐波那契网格公式 代码 前言 本篇学习使用numpy生成球面斐波那契网格. 斐波那契网格公式 对于一个球体,要在球体表面上均匀选取N个点 ...
- Python numpy使用记录4.逻辑运算,与或非,异或
Python numpy使用记录4.逻辑运算,与或非,异或 前言 numpy的逻辑运算函数 与或非 异或 numpy逻辑运算符 前言 最近写码碰到一个问题,有a,mask_1,mask_2,mask_ ...
- 附录7:SciPy实例记录
目录 SciPy简介 SciPy基础 Numpy基础简要回顾 Numpy的stack,vstack,hstack,dstack,concatenate SciPy特殊函数 SciPy常量 SciPy应 ...
- 附录4:Matplotlib实例记录
matplotlib是受MATLAB启发而诞生的,其绘图方式类似于MATLAB 一般来说,绘图的大部分功能都可以通过matplotlib.pyplot实现,对于notebook,需要打开魔法开关%ma ...
- python爬虫实例-记录一次简单的Python爬虫实例
本次的这篇文章主要是和大家分享了一篇关于记录一次简单的Python爬虫实例 ,有需要的小伙伴可以看一下. 主要流程分为: 爬取.整理.存储 1.其中用到几个包,包括 requests 用于向网站发送请 ...
最新文章
- 轻量级RGB-D显著目标检测的中层融合
- 加密_easy_crypto
- opencv 霍夫曼变换 直线提取
- Vue实现仿音乐播放器12-实现歌手页面效果
- 论:CMMI项目策划方法(PP)
- 关于肉鸡的一些使用教程
- mysql 某列加全文索引_MySQL使用全文索引(fulltext index)---高性能
- Servlet初步认识(一)
- 基于jsonwebtoken(JWT) 的web认证 (Node版实现)
- JavaWeb:tomcat知识以及遇到的一些小问题
- 什么是地面站空间分集技术?以及卫星通信中的Ka-波段介绍
- 2022爱分析·虚拟化活动实践报告
- 小程序tab切换引起的echarts渲染堆积到一块的显示问题(三)
- android模拟器虚拟机的下载、安装和使用
- Pyhton计算一元二次方程的根
- 推荐六本前端开发必看的书籍
- 寒假每日一题——拖拉机
- 古董电脑室:2019日记簿(二)
- 实战模拟│企业微信机器人实时报错预警
- iPhone手机所有机型尺寸总汇