【Python】Numpy简单入门
Numpy
Numpy是Python中科学计算的核心库。Numpy提供了高性能的多维数组对象,还有用于处理这些数组的工具。
数组
Numpy的主要数据类型是ndarray即多维数组,可以用嵌套的Python列表中初始化numpy数组,并使用方括号访问元素。数组具有以下几个属性:
- ndarray.ndim: 数组的维数
- ndarray.shape: 数组每一维的大小
- ndarray.size: 数组中全部元素的数量
- ndarray.dtype: 数组中元素的类型(numpy.int32, numpy.int16, and numpy.float64等)
- ndarray.itemsize:每个元素占几个字节
数组操作
import numpy as np # 导入numpy模块
a = np.array([1,2,3])
print(type(a)) # a的类型是numpy.ndarray
print(a.shape) # 一维数组,列向量
print(a[0],a[1],a[2]) # 下标从0开始计数
a[0] = 5 # 修改数组元素的值
print(a)
b = np.array([[1,2,3],[4,5,6]])
print(b.shape) # 二维数组,2×3
print(b[0,0],b[0,1],b[1,0]) # 二维数组下标c = np.array([1,]) # 一维数组
print(c.shape)
运行结果
<class 'numpy.ndarray'>
(3,)1 2 3[5 2 3](2, 3)1 2 4(1,)
创建数组
import numpy as np
a = np.zeros((2,2)) # 2×2全零数组
print(a)
b = np.ones((1,2)) # 2×2全一数组
print(b)
c = np.full((2,2),7) # 2×2常量数组,运行结果是‘7’而不是‘7.’
print(c)
d = np.eye(2) # 2×2单位数组
print(d)
e = np.random.random((2,2)) # 2×2随机数组,范围为[0,1]
print(e)
运行结果
[[ 0. 0.][ 0. 0.]][[ 1. 1.]][[7 7][7 7]][[ 1. 0.][ 0. 1.]][[ 0.75674195 0.00198805][ 0.0375324 0.72334415]]
数组索引
Numpy提供了几种索引数组的方法。
切片
类似于Python中的列表List,可以将numpy数组进行切片。如果是多维数组,需要为数组的每个维度指定一个切片。
import numpy as np
a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
b = a[:2,1:3]print(a)
print(b)
print(a[0,1]) # 第一行第二个
b[0,0] = 77 # a、b共用同一数据
print(a[0,1])a[0,1] = 60 # 改变a或b,都会改动另一方,类似C++中引用
print(b[0,0])
运行结果
[[ 1 2 3 4][ 5 6 7 8][ 9 10 11 12]][[2 3][6 7]]27760
整型索引与切片索引混合
这个做法会产生比原始数组更低级的数组。
import numpy as np
a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
row_r1 = a[1,:] # 产生一维数组
row_r2 = a[1:2,:] # 产生二维数组
print(row_r1,row_r1.shape)
print(row_r2,row_r2.shape)col_r1 = a[:,1]
col_r2 = a[:,1:2]
print(col_r1,col_r1.shape)
print(col_r2,col_r2.shape)
运行结果
[5 6 7 8] (4,)[[5 6 7 8]] (1, 4)[ 2 6 10] (3,)[[ 2][ 6][10]] (3, 1)
整数数组索引
当对numpy数组使用切片索引时,生成的数组将始终是原始数组的子数组。而整数数组索引则允许使用另一个数组的数据构造任意的数组。
import numpy as np
a = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
print(a[[0,1,2],[0,1,0]]) # 行、列
print(np.array([a[0,0],a[1,1],a[2,0]])) # 每个的坐标b = np.array([0,2,0,1])
print(a[np.arange(4),b])a[np.arange(4),b] += 10
print(a)
运行结果
[1 5 7][1 5 7][ 1 6 7 11][[11 2 3][ 4 5 16][17 8 9][10 21 12]]
布尔数组索引
布尔数组索引可挑选出一个数组的任意元素。通常,这种类型的索引用于选择满足某些条件的数组的元素。
import numpy as np
a = np.array([[1,2],[3,4],[5,6]])
bool_idx = (a > 2) # 逐个比较
print(bool_idx)
print(a[bool_idx])
print(a[a > 2])
运行结果
[[False False][ True True][ True True]][3 4 5 6][3 4 5 6]
数据类型
import numpy as np
x = np.array([1,2]) # int64
print(x,x.dtype)x = np.array([1.0,2.0]) # float64
print(x,x.dtype)x = np.array([1.5,2.8],dtype = np.int64) # 强制转换,int64
print(x,x.dtype)
运行结果
[1 2] int32[ 1. 2.] float64[1 2] int64
数组计算
数组可以进行基本的数学函数计算,并且可以作为操作符重载和在numpy模块中的函数。
import numpy as np
x = np.array([[1,2],[3,4]],dtype = np.float64)
y = np.array([[5,6],[7,8]],dtype = np.float64)print(x + y) # 加法
print(np.add(x,y))print(x - y) # 减法
print(np.subtract(x,y))print(x * y) # 乘法
print(np.multiply(x,y))print(x / y) # 除法
print(np.divide(x,y))print(np.sqrt(x)) # 开方
print(np.sum(x)) # 所有元素相加
print(np.sum(x,axis = 0)) # 列向量相加
print(np.sum(x,axis = 1)) # 行向量相加v = np.array([9,10])
w = np.array([11,12])print(x.T) # 多维数组转置
print(v.T) # 一维数组转置不发生改变print(v.dot(w)) # 计算内积
print(np.dot(v,w))
print(np.dot(x,v))
print(np.dot(x,y))
运行结果
[[ 6. 8.] # 加法 [ 10. 12.]]
[[ 6. 8.][ 10. 12.]][[-4. -4.] # 减法[-4. -4.]]
[[-4. -4.][-4. -4.]][[ 5. 12.] # 乘法[ 21. 32.]]
[[ 5. 12.][ 21. 32.]][[ 0.2 0.33333333] # 除法[ 0.42857143 0.5 ]]
[[ 0.2 0.33333333][ 0.42857143 0.5 ]][[ 1. 1.41421356] # 开方[ 1.73205081 2. ]]10.0 # 所有元素相加[ 4. 6.] # 列向量相加[ 3. 7.] # 行向量相加[[ 1. 3.] # 多维数组转置[ 2. 4.]][ 9 10] # 一维数组转置不发生改变219 # 计算内积v.dot(w)219 # 计算内积np.dot(v,w)[ 29. 67.] # 计算内积np.dot(x,v)[[ 19. 22.] # 计算内积np.dot(x,y)[ 43. 50.]]
Broadcasting
Broadcasting广播机制是Python中一种强大的机制,它允许numpy在执行算术运算时使用不同形状的数组。当对一个较小的数组和一个较大的数组进行运算时,通过多次使用较小的数组来对较大的数组执行一些操作。
import numpy as np
x = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
v = np.array([1,0,1])y_empty = np.empty_like(x) # 创建一个与x大小相同的空矩阵
for i in range(4):y_empty[i,:] = x[i,:] + v;
print(y_empty)vv = np.tile(v,(4,1)) # 将v垂直地堆叠起来,形成新数组vv,比上一种方法运行速度快
print(vv)
y_tile = x + vv
print(y_tile)y_bc = x + v # 传播机制BoardCasting
print(y_bc)
运行结果
[[ 2 2 4] # y_empty[ 5 5 7][ 8 8 10][11 11 13]][[1 0 1] # vv[1 0 1][1 0 1][1 0 1]][[ 2 2 4] # y_tile[ 5 5 7][ 8 8 10][11 11 13]][[ 2 2 4] # y_bc[ 5 5 7][ 8 8 10][11 11 13]]
【Python】Numpy简单入门相关推荐
- Python爬虫简单入门教程
这篇 Python 爬虫教程主要讲解以下 5 部分 了解网页结构: 使用 requests 库抓取网站数据: 使用 Beautiful Soup 解析网页: 清洗和组织数据: 爬虫攻防战: 了解网页结 ...
- python爬虫简单入门(爬网页文本信息)
环境 python 3.8.2 Shell 也可以使用PyCharm 一.爬网页文本基本步骤 1.请求目标网页,用requests请求,如果还没有安装,打开cmd,输入下面命令进行安装 pip ins ...
- 爬取每日必应图片,python爬虫简单入门
爬取每日必应图片: 网址:微软必应搜索 第一步,打开网站: 右键,查看网页源代码: 初看有点吓人,不过幸运的是图片地址就在开头几行显眼的位置 ![在这里插入图片描述](https://img-blog ...
- 机器人 python 极客入门_机器人Python极客编程入门与实战
Python是一种面向对象.解释型的计算机程序设计语言,其简洁实用.高效,拥有众多模块库,可移植,跨平台,简单易学,易于上手.随着计算机深入发展,Python逐渐成为最适合青少年做创意设计的语言,也同 ...
- 很多都是python很简单吗,但是要如何才能入门python并精通呢?
1,python怎么学 一般来说,Python几个月应该是可以入门了.如果你几个月还没有入门,一定是方法不对,要么就是偷懒了.我在公众号里面有一篇文章详细写过 '初学者上来不要学爬虫',爬虫虽然非常有 ...
- 一步一步学python爬虫_初学Python之爬虫的简单入门
初学Python之爬虫的简单入门 一.什么是爬虫? 1.简单介绍爬虫 爬虫的全称为网络爬虫,简称爬虫,别名有网络机器人,网络蜘蛛等等. 网络爬虫是一种自动获取网页内容的程序,为搜索引擎提供了重要的数据 ...
- [转载] python numpy 子数组_Python学习笔记3:Numpy入门
参考链接: Python中的numpy.logaddexp2 参考<Python:数据科学手册>一书,仅作个人学习及记录使用,若有侵权,请联系后台删除. 1 理解Python中的数据类型 ...
- Python 基础 之 jupyter notebook 中机器学习的简单入门书写数字识别 demo 操作学习
Python 基础 之 jupyter notebook 中机器学习的简单入门书写数字识别 demo 操作学习 目录 Python 基础 之 jupyter notebook 中机器学习的简单入门书写 ...
- [入门教程](python numpy入门)
[入门教程](python numpy入门) NumPy NumPy是一个开源的Python科学计算基础库,包含 •一个强大的N维数组对象ndarray •广播功能函数 •整合C/C++/Fortra ...
最新文章
- html 怎么自动让图片居中显示,css中怎样让图片居中显示?
- 《信号检测与处理》的学习
- (基础)HTML文档结构知识点讲解
- java实现选择排序 带打印,选择排序算法的JAVA实现
- SD 胡策 Round 1 T3 彩尾巴猹的二进制数
- jtag引脚定义_从逆向分析的角度学习硬件调试技巧JTAG,SSD和固件提取
- 提升安全性WindowsXP必禁的十大服务
- Android Studio实现QQ的注册、登录和好友列表页面的跳转
- React-12 Context的使用
- CGI-plus_x86_x64_自适应版系统安装和备份工具参数案例笔记
- 最新 CCF A 类人工智能会议论文下载汇总 (含2022)
- Python读取文件找出重复元素
- Word TOC域的使用说明
- java学习笔记(二):Spring-security的Remember-me配置,以及配置Session管理器防止Session fixation
- 微信小程序上传Excel文件并分析上传值数据库
- html页面小宠物代码大全,纯css3实现宠物小鸡实例代码
- Mysql中的常用类型 说明
- 仿真(Simulation)
- html+css实现了简单的注册页面
- [Ubuntu 18.04]公共DNS设置[/etc/resolv.conf]
热门文章
- Top1的3D目标检测方法(已开源)
- git 下载项目和更新项目(1)
- RDKit:化合物骨架分析
- Machine Learning | (3) Scikit-learn的分类器算法-k-近邻
- 250g硬盘linux分区,linux分区格式化命令使用方法
- python django windows_Python+Django在windows下的开发环境配置图解
- 生信分析-本地BLAST
- 微生物组-宏基因组分析专题研讨会(2022.5)
- FEMS:微生物群落生态学数据挖掘的R包microeco
- MPB:中南大学刘学端、马丽媛组-基于16S测序和RT-qPCR的硫化矿物表面微生物群落组成分析...