Numpy学习笔记
来源:互联网 发布:java volatile atomic 编辑:程序博客网 时间:2024/06/01 09:02
安装
通过Anconda安装
网页形式的编辑器
Jupyter NoteBook
很好用
anconda安装好后,直接终端输入
jupyter notebook
然后会跳出网页。目录类似GIT
Numpy介绍+ndarry
scipy
scipy库是基于python生态的一款开源数值计算、科学与工程应用的开源软件。
包括常用的Numpy,pandas、matplotlib等库。
Numpy
Numerical Python
即数值python包
包括的内容
1.一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组,称为ndarray
N-dimensional array object
2.用于对整组数据进行快速运算的标准数学函数
ufunc (universal function object);
3.用于整合c/c++和Fortran代码的工具包
4.实用线性代数、傅里叶变换和随机数生成函数。numpy和稀疏矩阵运算包scipy配合使用更加方便
约定导入方式
import numpy as np
ndarray
np.array( ##建立Ndarray多维数组,可以直接使用嵌套列表【 【1,2,3,4】, ##开头几个方括号,就是几维的 【2,3,4,5】 】,【 【3,4,5,6】, 【4,5,6,7】 】)
ndarray属性
ndim——维度数量
shape——是一个表示各维度大小的元组,即数组的形状
dtype——是一个用于说明数组元素数据类型的对象
arr2 = np.array ( [ 'Python','cctv','ibeifeng',hello world' ] , dtype = '|S4')arr2 >>>array ( [ 'Pyth','cctv','ibei','hell'],dtype = '|S4')
size——元素总个数,即shape中个数组相乘
ndarry的shape属性巧算
多维数组维度,shape算法
逗号分割
怎么取数
arr2【0】【1】【1】
ndarry的常见创建方式
array函数
接收一个普通python序列,转成ndarray,之前讲的
zeros函数
创建指定长度或形状的全零数组
通过help(zeros)查看帮助
np.zero((2,2))##使用元组类型,两个括号,定义了两个维度,每个维度有两个值##2行2列,我觉得倒着看方便array([[0. , 0.], ##默认是浮点数 [0. , 0.]])
ones函数
创建指定长度或形状的全1数组,同zeros一样
np.ones((5,6,2) ,dtype = int)
empty函数
创建一个没有任何具体值的数组(准确地说是一些未初始化的垃圾值)
作用:
填充随机值
比如我们要做算法,一开始不知道数值,设一个随机值
NAN 空值,缺失值
其他创建方式
arrange函数
类似与python的range函数,通过指定开始值、终值和步长来创建一维数组,注意数组不包括终值
np.arange(2,20,3)
linspace函数
通过指定开始值、终值和元素个数来创建一维数组,可以通过endpoint关键字指定是否包括终值,缺省设置是包括终值,等差数列
logspace函数
和linspace类似,不过它创建等比数列
np.logspace(2,20,3)##第一个值代表10的2次方,第二个代表10的20次方,第三个代表生成元素的个数
以上皆为一维数组,如何生成多维数组(转置)
reshape
np.arange(2,20,2).reshape((3,3))np.arange(2,20,2).reshape((3,-1))##-1代表根据前面的数自动计算后面的数
使用随机数填充数组
即用numpy.random模块的random()函数,数组所包含的元素数量由参数决定
np.random.random((2,3,4))##随机数范围一般在0-1之间np.random.random_sample()##生成每一位随机数的方法
总结
先规范显示出数组,
层层去中括号对,直到无中括号对,每去一个层,一个维度,去掉一层[],后的元素个数(逗号隔开)即该维度的元素个数。
Numpy中的数据类型
创建时
创建Numpy数组时可以通过dtype属性显式指定数据类型,如果不指定Numpy会自己判断出合适的数据类型,所以一般无需显式指定。
转换
astype方法,可以转换数组的元素数据类型,得到一个新数组
arr2 = np.arange(2,10,2) ##建立数组arr2.dtype ##查看类型arr3 = arr2.astype('float‘) ##转换为浮点格式arr4 = arr2.astype('|U2') ##使用Unicode编码,每个元素长度为2arr5 = arr2.astype('|S2') ##使用string编码(转换为十六进制编码),每个元素长度为2arr6 = np.array([1,2,3,'4'], dtype = np.float) ##建议使用np中自带的形式np.float去处理,规范写法
改变array形状
reshape
形状可变,元素总数不可变
不改变原来的ndarray,得到新的ndarray是原数组的视图
视图的概念
视图
相当于多个变量使用(指向)一个内存地址(空间)
只要修改一个,都会修改
副本
复制一份放到新的内存空间
修改其中一个副本,其他的不会改变
arr3 = arr.copy()##拷贝,生成副本
因此对于ndarray的一些方法操作,首先区分是否会改变原来变量,以此来判断是视图还是副本
表格详见PPT,引号内填的一般是类型代码
Nnmpy基本操作
数组与标量、数组之间的运算
numpy的算术运算
加法
arr = np.arange(0,20,2)arr + 2 ##会给每一个元素都加2
或者:
arr2 = np.arange(2,40,4) ##相加的数组形状要一样arr + arr2 ##同一位置的做加法运算
加减乘除基本相同
除法可能警告除数可能为零,结果为0
##怎么处理?from __future__ import division ##保证数据合法性arr2/arr ##还是会警告,不过异常值原来为0现在为nan
- 数组算数运算必须保证两边数组形状一致。
- 元素级的运算。
数据的矩阵积(matrix product)
1.满足第一个矩阵的列数与第二个矩阵的行数相同,才可以进行矩阵乘法——为保证每个元素都有的乘
2.矩阵积不是元素级运算
3.Excel案例
##取随机数=randbetween(0,10)##求每个公司花费的总金额和购买的产品大小
索引和切片
索引与切片
两种方法:
new_arr1 [1 ][ 1 ]new_arr1 [ 1,1 ]
例子:
new_arr1 [1]new_arr1 [ 1,0:] ##普遍写法new_arr1 [0, 0:2 ,1:3 ] ##嵌套取数##或者new_arr1 [0] [ 0 : 2 ][ 1 ] [ 1 : 3 ]
- 切片是视图
布尔型索引
筛选作用
快速筛选数据在不在某个范围内
例子
arr3 > 0.5##进行判断,输出ture false矩阵arr3[arr3 >0.5]##可以把满足条件的值取出来##true的位置取出来,组成新数组arr4 [arr4 =='Tom'] = 1##数据替换,将tom替换为1
与非或操作
数据规整:与&或|非~
花式索引
arr = np.arange (32).reshape((8,4))arr [[0,3,5]]arr [[0,3,5],[0,3,2]] ##前一个取出对应行,后一个取出对应列 ##整数数组形式索引ix ##ix函数产生一个索引器
详见PPT
ixnp.ix_([0,3,5],[0,2,3])np.ix_([0,3,5],[0,2,1,3])##而且进行了重新排列
数组转置与轴兑换
数组的T属性
arr.transpose() ##生成视图arr.T ##生成视图
轴兑换
通用函数
1.快速的元素级数组函数
2.ufunc
一种对ndarray中的数据执行元素级运算的函数,也可以看做简单函数的矢量化包装器
简单函数:接收一个或多个标量值,并产生一个或多个标量值
3.常见的一元通用函数
##详见PPTnp.isnan(arr3)
4.常见的二元通用函数
np.power(arr,arr2)
5.聚合函数
- 对一组值进行操作,返回一个单一值作为结果的函数
- 因此求数组所有元素之和、最大最小标准差就是聚合函数
- 聚合函数可以指定对数值的某个轴元素进行操作:
arr.mean (axis =0)
np.where函数
np.where函数是三元表达式 x if condition else y 的矢量化版本
实现数据的过滤操作
例子
xarr = np.array( [1.1,2.2,3.3,4.4])yarr = np.array( [1.2,2.3,3.4,4.5])bool_arr=np.array([True,False,False,True]) ##布尔数组zip_arr = zip (xarr,yarr,bool_arr) ##数组合并result = ['%.2f' % x if bl else '%.2f' % y for x,y,bl in zip_arr ] ##三元表达式,满足条件输出,附带格式化功能np.where (bool_arr,xarr,yarr) ##如果用np.where可以这么做 ##np.where(表达式数组,当前表达式为True提取数据的数组,当前表达式为False提取数据的数组)result = [( x if bl else y) for x,y,bl in zip_arr if x >2 ] ##先做for 取出数值,然后做if>2,如果大于2,进行前面三元表达式操作,如果不大于就不操作
np.unique函数
求数组中不重复的元素
例子:
arr = np.array(['中国‘,’中国‘,’中国‘,’美国‘,’英国‘])arrfor i in arr: print i 这样才可以显示中文arr1 = np.unique(arr)for i in arr: print i ##检查发现没有重复值了
数组数据文件读取
分两种
将数组以二进制格式保存到磁盘
save写数据
arr = np.random.random((2,3,4))np.save('data',arr) ##将多维数组存储到文件,自动添加后缀.npy(二进制文件,记事本无法打开)
load读取二进制形式的数据文件
arr2 = np.load('data.npy') ##读取文件时,需要后缀
存取文本文件
读取数据
np.loadtxt
fname 文件名,dtype 数据类型,comments 注释行的符号定义,delimiter 数据分隔符的定义,converteres 转换函数,skipprows 跳过的行数,usecols 使用哪些列
arr4 = np.loadtxt('example.csv',delimiter = ',' ) ##数字自动转为浮点数 ##如果原始数据中没有分隔符,用空格,就不用设置分隔符delimiter
np.genfromtxt
np.genfromtxt('example.csv',delimiters = ',') ##类似loatxt
写入文本文件
np.savetxt('arr.csv',arr5,delimiter = ',') ##自动写入了科学计算法np.savetxt('arr.csv',arr5,delimiter = ',' ,fmt = '%.2f')np.savetxt('arr.csv',arr5.reshape((2,6)),delimiter = ',' ,fmt = '%.2f') ##修改形状后写入arr3 = np.random.random((2,3,4)) ##如果使用随机数,可能会报错,因为可能不是二维数组 ##如果数组为二维以上数组,必须转换为二维数组才能存储np.savetxt('arr1.csv',arr3.reshape((4,6)),delimiter = ',') ##解决办法,改变形状后,可以存进去
- NumPy学习笔记(1)
- NumPy学习笔记 (2)
- NumPy学习笔记 (3)
- NumPy学习笔记 (4)
- NumPy学习笔记
- numpy学习笔记
- NumPy学习笔记
- NumPY学习笔记
- 【python】numpy学习笔记
- Numpy 学习笔记一
- NumPy学习笔记1
- NumPy学习笔记2
- NumPy学习笔记
- NumPy学习笔记
- [NumPy]入门-学习笔记
- numpy学习笔记
- numpy入门学习笔记
- NumPy学习笔记
- 二维码
- Linux使用jstat命令查看jvm的GC情况
- Redis is configured to save RDB snapshots
- 习题7-10:守卫棋盘(dfs迭代加深)
- 百度地图的使用
- Numpy学习笔记
- 设计一个栈实现最大值函数
- [codeforces246E]Blood Cousins Return(dsu on the tree+STL)
- Fresco图片加载框架
- 初识construct 2
- LauncherRootView和DragLayer的布局过程
- 前端工程化
- SpringMvc Controller介绍和常用注解
- java AWT菜单