使用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实例记录相关推荐

  1. 附录3:Pandas实例记录

    Pandas广泛用于数据分析,有两种数据结构:Series和DataFrame,Pandas的操作以列为核心,部分原因在于机器学习的特征以列保存 #Pandas实例记录 #基本数据结构:Series和 ...

  2. Transformer详细解读与预测实例记录

    文章目录 Transformer详细解读与预测实例记录 1.位置编码 1)输入部分: 2)位置编码部分: 2.多头注意力机制 1)基本注意力机制 2)transformer中的注意力 3.残差和Lay ...

  3. mongodb导出导入实例记录

    mongodb导出导入实例记录 平时很用mongodb,所以用到了,就需要去网上搜索方法,干脆将自己的实际经历记录下来,方便日后使用. # 大致需求 源库:db_name_mongo 源IP:192. ...

  4. Android Studio 学习实例记录-手电筒

    Android Studio 学习实例记录-手电筒 刚安装好Android Studio3.1.2,上网搜了一个实例进行实践学习,仅用这篇文章来记录学习过程 MainActivity.java的源码来 ...

  5. Python numpy使用记录5.生成球面斐波那契网格

    Python numpy使用记录5.生成球面斐波那契网格 前言 斐波那契网格公式 代码 前言 本篇学习使用numpy生成球面斐波那契网格. 斐波那契网格公式 对于一个球体,要在球体表面上均匀选取N个点 ...

  6. Python numpy使用记录4.逻辑运算,与或非,异或

    Python numpy使用记录4.逻辑运算,与或非,异或 前言 numpy的逻辑运算函数 与或非 异或 numpy逻辑运算符 前言 最近写码碰到一个问题,有a,mask_1,mask_2,mask_ ...

  7. 附录7:SciPy实例记录

    目录 SciPy简介 SciPy基础 Numpy基础简要回顾 Numpy的stack,vstack,hstack,dstack,concatenate SciPy特殊函数 SciPy常量 SciPy应 ...

  8. 附录4:Matplotlib实例记录

    matplotlib是受MATLAB启发而诞生的,其绘图方式类似于MATLAB 一般来说,绘图的大部分功能都可以通过matplotlib.pyplot实现,对于notebook,需要打开魔法开关%ma ...

  9. python爬虫实例-记录一次简单的Python爬虫实例

    本次的这篇文章主要是和大家分享了一篇关于记录一次简单的Python爬虫实例 ,有需要的小伙伴可以看一下. 主要流程分为: 爬取.整理.存储 1.其中用到几个包,包括 requests 用于向网站发送请 ...

最新文章

  1. 轻量级RGB-D显著目标检测的中层融合
  2. 加密_easy_crypto
  3. opencv 霍夫曼变换 直线提取
  4. Vue实现仿音乐播放器12-实现歌手页面效果
  5. 论:CMMI项目策划方法(PP)
  6. 关于肉鸡的一些使用教程
  7. mysql 某列加全文索引_MySQL使用全文索引(fulltext index)---高性能
  8. Servlet初步认识(一)
  9. 基于jsonwebtoken(JWT) 的web认证 (Node版实现)
  10. JavaWeb:tomcat知识以及遇到的一些小问题
  11. 什么是地面站空间分集技术?以及卫星通信中的Ka-波段介绍
  12. 2022爱分析·虚拟化活动实践报告
  13. 小程序tab切换引起的echarts渲染堆积到一块的显示问题(三)
  14. android模拟器虚拟机的下载、安装和使用
  15. Pyhton计算一元二次方程的根
  16. 推荐六本前端开发必看的书籍
  17. 寒假每日一题——拖拉机
  18. 古董电脑室:2019日记簿(二)
  19. 实战模拟│企业微信机器人实时报错预警
  20. iPhone手机所有机型尺寸总汇

热门文章

  1. 用Scrum敏捷开发工具Leangoo做Sprint迭代管理
  2. 雷军做程序员时写的博客,太牛了!
  3. 服务器管理神器 开源堡垒机 jumpserver 实战教程
  4. 2022计算机行业技术策略报告
  5. 面试官欺负人:new Object()到底占用几个字节?
  6. SpringBoot内置tomcat启动原理
  7. 微服务追踪系统,你绝对想不到!
  8. C语言可以不用,但是不能不会!
  9. 活锁,也许你需要了解一下
  10. 聊聊用户裂变的那些事