Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python---numpy的初步认识

Python---numpy的初步认识

作者头像
用户7886150
修改于 2021-01-05 02:25:48
修改于 2021-01-05 02:25:48
1K0
举报
文章被收录于专栏:bit哲学院bit哲学院

参考链接: Python中的numpy.isfinite

什么是numpy? 

NumPy是Python科学计算的基础包。  (它提供了多维数组对象、基于数组的各种派生对象(例如,masked Array, 矩阵)。除此之外,还提供了各种各样的加快数组操作的例程,包括数学基本计算、逻辑、图形操作、排序、选择、输入输出,离散傅立叶变换、基础线性代数、基础统计操作、随机仿真等等。) 

NumPy的核心是ndarray对象。一方面,Ndarray对象封装了可以包含相同数据类型的多维数组;另一方面,为获得更好的性能, 在ndarray上的操作都是在编译过的代码上执行的。此外,和Python自身的序列对象相比,两者之间有如下不同: 

NumPy数组的大小是固定的。Python的List是可以动态增长的。改变NumPy的大小会重新创建一个新的数组并把原来的删掉。NumPy数组中的元素一定是同一类型的。(相应地,每个元素所占的内存大小也是一样的。)例外情况是:(不是特别理解:one can have arrays of (Python, including NumPy) objects, thereby allowing for arrays of different sized elements.)NumPy数组支持在大量数据上进行数学计算和其他类型的操作。通常情况下,与Python自带的序列类型相比,NumPy数组上的操作执行更高效,代码量也更少。越来越多的Python科学计算包都是用到了NumPy的数组;虽然这些库支持Python序列类型的输入,但是内部操作还是要先将其转换为NumPy的数组类型,而且输出通常就是NumPy数组。所以,如果你想要高效地使用这些Python的科学计算包,仅仅知道Python内建的序列类型是不够的,你还需要知道如何使用NumPy数组。 

numpy怎么使用? 

导入使用包:import numpy as np创建ndarray.  直接创建: 

arr = np.array([1,3,4,5])

arr = np.array([

                [1,2,3,4],

                [5,6,7,8]

                ]) 

**通过函数方式创建**:参考下文的函数使用

numpy的常用函数有哪些? 

ndarray(数组)基础属性函数(axis=0表述列, axis=1表述行)  .ndim:数组的维度值  .shape:数组的维度的尺度(简单说就是数组的形状)。例如:(2,3,5)  .size:数组中所有元素的个数总和(一共都有多少个元素)  .dtype:数组中元素的类型(每个数组里面的类型是一样的)。例如:int32  .itemsize:数组中每个元素的大小(以字节为单为,每个元素占4个字节)ndarray(数组)的创建  注意:函数的相关参数,可以参考pycharm中函数参数的说明  np.array(list):将列表转换为ndarray  np.arange(n):创建多少到多少,步幅为多少的随机值的ndarray。  np.ones(shape):生成一个指定形状的,值全为1的ndarray。(shape是一个形状定义的元组:(3,2),下面的函数中shape都是这样的)  np.zeros(shape):生成一个指定形状的,值全为0的ndarray。  np.empty(shap):生成一个指定形状的数组,值为一些无效的垃圾数据  np.full(shape,val):生成一个指定形状,指定值的ndarray。  np.eye(n):生成行数等于列数的对角矩阵  np.ones_like(a):按数组a的形状生成全1的数组  np.zeros_like(a): 同理  np.full_like (a, val) : 同理  np.linspace(1,10,4, endpoint = False): 根据起止数据等间距地生成数组 ,endpoint 表示10是否作为生成的元素(等差数组)  np.logspace(0,9,10):等比数组  np.concatenate((ndarray1,ndarray2),axis=0):将两个ndarray组合起来 

注意:linspace 和 logspace默认都是闭合区间取值,第三个参数是元素个数  arange是前闭后开取值,第三个参数是步长 

数组的维度的转换  arr.shape = (x,y) 强制转换形状,改变原数组  arr.reshape(shape):不改变当前数组,按shape生成一个新的形状数组(与原数组共享内存)返回  np.swapaxes(arr,ax1,ax2):件两个维度进行调换  arr.flatten():对数据进行降维,返回折叠后的-维数组  arr.reshape(-1):也是降维  注意:维度转换简单理解就是数组中每个元素都有定位的x,y,z标识,维度转换,就是类似:y,x,z形式生成一个新的x,y,z数组  降维可以理解为,从左到右,按照每行的执行顺序将数据依次放入新的数组中数组的类型转变  数据类型的转换:arr.dtype=np.float32 指定当前数组的数据类型  arr2 = arr.astype(float) ,根据当前数组,创建一个指定类型的新数组  数组向列表的转换:a.tolist()数组的索引和切片  一维数组切片  a = np.array([9,8,7,6,5,4])  a[1:4:2]==>array([8,6]) [起始编号:终止编号(不含):步长]  多维数组切片 

arr = np.arange(12).reshape((3, 4)) 

arr[i, :] #取第i行数据

arr[i:j, :] #取第i行到第j行的数据    

arr[:,0] # 取第0列的数据,以行的形式返回的

arr[:,:1] # 取第0列的数据,以列的形式返回的

# 取第一维的索引1到索引2之间的元素,也就是第二行 

# 取第二维的索引1到索引3之间的元素,也就是第二列和第三列

arr[1:2, 1:3] 

# 取第一维的全部 

# 按步长为2取第二维的索引0到末尾之间的元素,也就是第一列和第三列

arr[:, ::2] 

简单的理解就是逗号(,)是维区隔符,多个逗号就多了一个维,冒号(:)是切片方式,一组最多两个冒号(开始:结束(不包含):步长)  例如一个3维的数组要切片  arr[开始:结束(不包含):步长 , 开始:结束(不包含):步长, 开始:结束(不包含):步长 ]  最后一维的切片没冒号,就是行显示,有冒号就是列显示了 

普通索引数组  布尔索引数组:  names = np.array([u’张三’,u’张四’,u’张五’])  scores = np.array([  [85,86,87,88],  [95,96,97,98],  [55,56,57,58]  ])  classs = np.array([u’语文’,u’数学’,u’物理’,u’化学’])  scores[names == u’张四’].reshape(-1)[classs == u’物理’][0] 

花式索引数组:arr[np.ix_([0,3,5],[0,3,2])] 

数组的运算  函数形式运算  一元函数  np.abs(a) np.fabs(a) : 取各元素的绝对值  np.sqrt(a) : 计算各元素的平方根  np.square(a): 计算各元素的平方  np.log(a) np.log10(a) np.log2(a) : 计算各元素的自然对数、10、2为底的对数  np.ceil(a) np.floor(a) : 计算各元素的ceiling 值, floor值(ceiling向上取整,floor向下取整)  np.rint(a) : 各元素 四舍五入  np.modf(a) : 将数组各元素的小数和整数部分以两个独立数组形式返回  np.exp(a) : 计算各元素的指数值  np.sign(a) : 计算各元素的符号值 1(+),0,-1(-)  np.modf(a):将数组中元素的小数为和整数位以两部分独立数组的形式返回  np.isnan(a):返回一个表示“哪些值是NaN(不是一个数字)”的布尔类型数组  np.isfinite(a), np.isinf(a) : 分别表示“哪些元素是有穷的(非inf,非NaN)”或者“哪些元素是无穷的“的布尔类型数组  np.cos(arr),np.cosh(arr)  np.sin(arr), np.sinh(arr)  np.tan(arr),np.tanh(arr)  普通以及双曲型三角函数  np.arccos(arr), np.arccosh(arr)  np.arcsin(arr), np.arcsinh(arr)  np.arctan(arr), np.arctanh(arr)  反三角函数 

二元函数  np.mod(arr1,arr2) 元素级的取模  np.dot(arr1,arr2) 求两个数组的点积(矩阵积)  np.greater(arr1,arr2): (arr1 >arr2)  np.less(arr1,arr2) : (arr1 < arr2)  np.equal(arr1,arr2): (arr1 == arr2)  np.less_equal(arr1, arr2):(arr1 <= arr2)  np.greater_equal(arr1,arr2):(arr1 

arr = np.array([

[1,2,np.NaN,4],

[4,5,6,np.NaN],

[7,8,9,np.inf],

[np.inf,np.e,np.pi,4]

])

condition = np.isnan(arr) | np.isinf(arr)

print(np.where(condition, 0, arr))

# 满足条件的值用第二个参数替换 

**数据的去重(去重重复值)**

“`  arr2 = np.unique(arr) #返回由单一值构成的从小到大的一维数组 

自己的矢量运算  a+b  a-b  a*b  a/b  a%b  a//b  b可也是数字,也可以是nbarray(但是必须和a一样的形状) 

/************************* 华丽的分割线 **********************************/ 

数据的CSV文件存取  CSV (Comma-Separated Value,逗号分隔值) 只能存储一维和二维数组 

np.savetxt(frame, array, fmt=’% .18e’, delimiter = None): frame是文件、字符串等,可以是.gz .bz2的压缩文件; array 表示存入的数组; fmt 表示元素的格式 eg: %d % .2f % .18e ; delimiter: 分割字符串,默认是空格  eg: np.savetxt(‘a.csv’, a, fmt=%d, delimiter = ‘,’ ) 

np.loadtxt(frame, dtype=np.float, delimiter = None, unpack = False) : frame是文件、字符串等,可以是.gz .bz2的压缩文件; dtype:数据类型,读取的数据以此类型存储; delimiter: 分割字符串,默认是空格; unpack: 如果为True, 读入属性将分别写入不同变量。  多维数据的存取  a.tofile(frame, sep=’’, format=’%s’ ) : frame: 文件、字符串; sep: 数据分割字符串,如果是空串,写入文件为二进制 ; format:: 写入数据的格式  eg: a = np.arange(100).reshape(5, 10, 2)  a.tofile(“b.dat”, sep=”,”, format=’%d’) 

np.fromfile(frame, dtype = float, count=-1, sep=’’): frame: 文件、字符串 ; dtype: 读取的数据以此类型存储; count:读入元素个数, -1表示读入整个文件; sep: 数据分割字符串,如果是空串,写入文件为二进制 

PS: a.tofile() 和np.fromfile()要配合使用,要知道数据的类型和维度。 

np.save(frame, array) : frame: 文件名,以.npy为扩展名,压缩扩展名为.npz ; array为数组变量  np.load(fname) : frame: 文件名,以.npy为扩展名,压缩扩展名为 

np.save() 和np.load() 使用时,不用自己考虑数据类型和维度。 

numpy随机数函数  numpy 的random子库 

rand(d0, d1, …,dn) : 各元素是[0, 1)的浮点数,服从均匀分布  randn(d0, d1, …,dn):标准正态分布  randint(low, high,( shape)): 依shape创建随机整数或整数数组,范围是[ low, high)  seed(s) : 随机数种子 

shuffle(a) : 根据数组a的第一轴进行随机排列,改变数组a  permutation(a) : 根据数组a的第一轴进行随机排列, 但是不改变原数组,将生成新数组  choice(a[, size, replace, p]) : 从一维数组a中以概率p抽取元素, 形成size形状新数组,replace表示是否可以重用元素,默认为False。  eg:  replace = False时,选取过的元素将不会再选取 

uniform(low, high, size) : 产生均匀分布的数组,起始值为low,high为结束值,size为形状  normal(loc, scale, size) : 产生正态分布的数组, loc为均值,scale为标准差,size为形状  poisson(lam, size) : 产生泊松分布的数组, lam随机事件发生概率,size为形状  eg: a = np.random.uniform(0, 10, (3, 4)) a = np.random.normal(10, 5, (3, 4)) 

numpy的统计函数  sum(a, axis = None) : 依给定轴axis计算数组a相关元素之和,axis为整数或者元组  mean(a, axis = None) : 同理,计算平均值  average(a, axis =None, weights=None) : 依给定轴axis计算数组a相关元素的加权平均值  std(a, axis = None) :同理,计算标准差  var(a, axis = None): 计算方差  eg: np.mean(a, axis =1) : 对数组a的第二维度的数据进行求平均  a = np.arange(15).reshape(3, 5)  np.average(a, axis =0, weights =[10, 5, 1]) : 对a第一各维度加权求平均,weights中为权重,注意要和a的第一维匹配 

min(a) max(a) : 计算数组a的最小值和最大值  argmin(a) argmax(a) : 计算数组a的最小、最大值的下标(注:是一维的下标)  unravel_index(index, shape) : 根据shape将一维下标index转成多维下标  ptp(a) : 计算数组a最大值和最小值的差  median(a) : 计算数组a中元素的中位数(中值)  eg:a = [[15, 14, 13],  [12, 11, 10] ]  np.argmax(a) –> 0  np.unravel_index( np.argmax(a), a.shape) –> (0,0) 

numpy的梯度函数  np.gradient(a) : 计算数组a中元素的梯度,f为多维时,返回每个维度的梯度  离散梯度: xy坐标轴连续三个x轴坐标对应的y轴值:a, b, c 其中b的梯度是(c-a)/2  而c的梯度是: (c-b)/1 

当为二维数组时,np.gradient(a) 得出两个数组,第一个数组对应最外层维度的梯度,第二个数组对应第二层维度的梯度。  

图像的表示和变换  PIL, python image library 库  from PIL import Image  Image是PIL库中代表一个图像的类(对象) 

im = np.array(Image.open(“.jpg”)) 

im = Image.fromarray(b.astype(‘uint8’)) # 生成  im.save(“路径.jpg”) # 保存 

im = np.array(Image.open(“.jpg”).convert(‘L’)) # convert(‘L’)表示转为灰度图 

PS:本博文摘抄自中国慕课大学上的课程《Python数据分析与展示》,推荐刚入门的同学去学习,这是非常好的入门视频。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Excel表格中最经典的36个小技巧,全在这儿了
技巧1、单元格内强制换行 技巧2、锁定标题行 技巧3、打印标题行 技巧4、查找重复值 技巧5、删除重复值 技巧6、快速输入对号√ 技巧7、万元显示 技巧8、隐藏0值 技巧9、隐藏单元格所有值。 技巧10、单元格中输入00001 技巧11、按月填充日期 技巧12、合并多个单元格内容 技巧13、防止重复录入 技巧14、公式转数值 技巧15、小数变整数 技巧16、快速插入多行 技巧17、两列互换 技巧18、批量设置求和公式 技巧19、同时查看一个excel文件的两个工作表。 技巧20:同时修改多个工作表 技巧21:恢复未保存文件 技巧22、给excel文件添加打开密码 技巧23、快速关闭所有excel文件 技巧24、制作下拉菜单 技巧25、二级联动下拉 技巧27、删除空白行 技巧28、表格只能填写不能修改 技巧29、文字跨列居中显示 技巧30、批注添加图片 技巧31、批量隐藏和显示批注 技巧32、解决数字不能求和 技巧33、隔行插入空行 技巧34、快速调整最适合列宽 技巧35、快速复制公式 技巧36、合并单元格筛选
统计学家
2019/09/25
8.3K0
Excel表格中最经典的36个小技巧,全在这儿了
Excel 常用的九十九个技巧 Office 自学教程快速掌握办公技巧
Microsoft Excel 是微软为 Windows、macOS、Android 和 iOS 开发的电子表格软件,可以用来制作电子表格、完成许多复杂的数据运算,进行数据的分析和预测,并且具有强大的制作图表的功能。由于 Excel 具有十分友好的人机界面和强大的计算功能,它已成为国内外广大用户管理公司和个人财务、统计数据、绘制各种专业化表格的得力助手。允许用户自定义界面的电子制表软件包括字体、文字属性和单元格格式,它还引进了智能重算的功能,当单元格数据变动时,只有与之相关的数据才会更新,荒岛本次带来九十九个 Excel 技巧,提高您的办公效率。
ximagine
2023/05/05
7.5K0
商业数据分析从入门到入职(2)Excel基础
Excel不仅仅只是存放数据的工具,其功能特别强大,甚至可以做出美观的仪表盘,如下:
cutercorley
2020/09/15
1.5K0
商业数据分析从入门到入职(2)Excel基础
吐槽下Excel的十大不规范使用问题
太多的人觉得每个月一个表格存放数据,一年12个月,一个工作薄文件里放12个工作表,然后还有大量的插件批量生成工作表,批量重命名工作表、工作表排序等一系列的功能来辅助完成这些提速性工作。
Excel催化剂
2021/08/19
1.3K0
个人永久性免费-Excel催化剂插件功能修复与更新汇总篇之六
原链接:https://www.jianshu.com/p/273108804cef
Excel催化剂
2021/08/19
7870
Excelize 2.2.0 发布, Go 语言 Excel 基础库
Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的电子表格文档。支持 XLSX / XLSM / XLTM 等多种文档格式,高度兼容带有样式、图片(表)、透视表、切片器等复杂组件的文档,并提供流式读写 API,用于处理包含大规模数据的工作簿。可应用于各类报表平台、云计算、边缘计算等系统。入选 2018 开源中国码云 Gitee 最有价值开源项目 GVP,目前已成为 Go 语言最受欢迎的 Excel 文档基础库。
xuri
2020/05/11
2.4K0
Excelize 2.2.0 发布, Go 语言 Excel 基础库
玩转Excel,一定要懂点儿运行逻辑和结构
Excel是以单元格为最小维度构建起来的,当我们打开Excel时,呈现在我们面前的就是一个个单元格。 Excel的所有功能基本上都是围绕单元格进行的。有时单元格里放的是一条条数据,有时放的是各种功能的函数与公式;有时我们需要对单元格进行筛选和排序,有时又需要对单元格进行合并;有时需要对单元格设置不同的格式,有时需要利用单元格中的数据进行数据分析及可视化操作。 大家有没有想过Excel是怎么存储和调用单元格中的各项数据、格式和不同的操作的? 简单地说,在Excel底层,刚才描述的所有针对Excel的操作或者存
博文视点Broadview
2022/04/15
1.4K0
玩转Excel,一定要懂点儿运行逻辑和结构
Excelize 2.7.0 发布, 2023 年首个更新
Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的电子表格文档。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多种文档格式,高度兼容带有样式、图片(表)、透视表、切片器等复杂组件的文档,并提供流式读写 API,用于处理包含大规模数据的工作簿。可应用于各类报表平台、云计算、边缘计算等系统。入选 2020 Gopher China - Go 领域明星开源项目(GSP)、2018 年开源中国码云最有价值开源项目 GVP (Gitee Most Valuable Project),目前已成为 Go 语言最受欢迎的 Excel 文档基础库。
xuri
2023/01/09
1.8K0
Excelize 2.7.0 发布, 2023 年首个更新
20个Excel操作技巧,提高你的数据分析效率
今日头条丨一点资讯丨腾讯丨搜狐丨网易丨凤凰丨阿里UC大鱼丨新浪微博丨新浪看点丨百度百家丨博客中国丨趣头条丨腾讯云·云+社区
数据猿
2019/08/06
2.5K0
数据分析常用的Excel函数合集(上)
Excel是我们工作中经常使用的一种工具,对于数据分析来说,这也是处理数据最基础的工具。
朱小五
2020/03/06
3.2K0
数据分析常用的Excel函数合集(上)
Excel表格的35招必学秘技[配图]
一、让数据按需排序   如果你要将员工按其所在的部门进行排序,这些部门名称既的有关信息不是按拼音顺序,也不是按笔画顺序,怎么办?可采用自定义序列来排序。   1.执行“格式→选项”命令,打开“选项”
ytkah
2018/03/06
7.8K0
Excel表格的35招必学秘技[配图]
个人永久性免费-Excel催化剂功能第44波-可见区域复制粘贴不覆盖隐藏内容
原文在简书上发表,再同步到Excel催化剂微信公众号或其他平台上,文章后续有修改和更新将在简书上操作, 其他平台不作同步修改更新,因此建议阅读其他出处的文章时,尽可能跳转回简书平台上查看。
Excel催化剂
2021/08/19
4.5K0
Excel基础
根据用户提供的文章内容,撰写摘要总结。
张果
2018/01/04
2.7K0
Excel基础
Excel催化剂100+大主题功能梳理导读
在100+的主题功能中,以下将尝试通过几个维度来作简单的梳理,希望能够对初次接触的朋友们可以更加清晰地了解Excel催化剂能够给自己的日常工作带来哪些的便利和帮助。
Excel催化剂
2021/08/19
3K0
能够提升Office三件套办公效率的工具箱-星泽V社
Office办公三件套——Excel、PowerPoint、Word,如果有了今天介绍的这三个插件,办公效率将会得到很大的提高。之前很多人说Office没有WPS的一些小功能人性化,那么我们来看一下这几个插件到底有多强大?
星泽V社
2022/04/11
1.1K0
能够提升Office三件套办公效率的工具箱-星泽V社
工作中必会的57个Excel小技巧
为了方便同学们学习和收藏,兰色把工作中最常用、最简捷的小技巧进行一次整理,共57个。希望对同学们有所帮助。
一朵灼灼华
2022/08/05
4.2K0
个人永久性免费-Excel催化剂功能第52波-相同内容批量合并单元格,取消合并单元格并填充内容
Excel催化剂已正式在千聊上发布视频,如查阅文章有理解障碍,不妨查看下视频,视频不定期更新,内容丰富,干货满满,有术亦有道!
Excel催化剂
2021/08/19
1K0
个人永久性免费-Excel催化剂功能第74波-批量排版格式利器,瞬间美化表格
其控制的颗粒度达到单元格级别,就如一张大画布,横竖画上格子线,任意发挥,所以有网传某某人用Excel来作画的惊艳之举(当然不一定最佳的使用场景,有比Excel更能胜任的专业绘画软件)。
Excel催化剂
2021/08/19
1.2K0
Excel 基础篇
Excel 2010是一款功能强大、方便灵活、使用快捷的电子表格制作软件,可用来创建数据表格:还可以利用公式或函数对所输入的数据进行计算...
技能锦囊
2020/04/14
2.4K0
Excelize 发布 2.6.1 版本,支持工作簿加密
Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的电子表格文档。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多种文档格式,高度兼容带有样式、图片(表)、透视表、切片器等复杂组件的文档,并提供流式读写 API,用于处理包含大规模数据的工作簿。可应用于各类报表平台、云计算、边缘计算等系统。入选 2020 Gopher China - Go 领域明星开源项目(GSP)、2018 年开源中国码云最有价值开源项目 GVP (Gitee Most Valuable Project),目前已成为 Go 语言最受欢迎的 Excel 文档基础库。
xuri
2022/08/22
1.4K0
Excelize 发布 2.6.1 版本,支持工作簿加密
推荐阅读
相关推荐
Excel表格中最经典的36个小技巧,全在这儿了
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档