Numpy基础学习
Numpy(Numerical Python的简称)是高性能科学计算和数据分析的基础包。
主要的功能:
1、ndarray,一个具有矢量运算和复杂广播工能的快速且节省空间的多维数组
2、用于对整组数据进行快速运算的标准数据函数(无需编写循环)
3、用于读写磁盘数据的工具以及用于操作内存映射文件的工具
4、线性代数、随机数生成以及傅里叶变换功能
5、用于集成由C、C++、Fortran等语言编写的代码的工具
一、Numpy的ndarray:一种多维数组对象、
numpy最重要的特点:
1、其N维数组对象(ndarray)
2、是一个快速灵活的大数据容器
3、可以利用这种数组对整块数据进行数学运算,其语法和标量元素之间的运算一样
4、ndarray中的所有元素必须是相同类型的。每个数组都有一个shape(表示各维度大小的元祖)和dtype(说明数组数据的对象)
1.1 ndarray的创建
import numpy as np data = [1,2,3,4]
'''
array([1, 2, 3, 4])
'''
arr = np.array(data) #
arr.ndim # 数组维度 #(4,)
arr.shape # 数组各维度大小的元祖
import numpy as np #额外能创建ndarray的方法 np.zeros(10) # 创建指定长度形状的数组, 全0
np.zeros((3,2))
np.zeros((1,2,3)) np.ones() # 创建指定长度形状的数组, 全1 np.empty((2,3,2)) # 创建没有任何具体值的数组
1.2 ndarray的数据类型
Numpy的数据类型
类型 | 说明 |
int8、uint8 | 有符号和无符号的8位(一个字节)整型 |
int16、uint16 | 有符号和无符号的16位(两个个字节)整型 |
int32、uint32 | 有符号和无符号的32位(三个字节)整型 |
int64、uint64 | 有符号和无符号的64位(四个字节)整型 |
float16 | 半精度浮点数 |
float32 | 标准的单精度浮点数。与C的float兼容 |
float64 | 标准的双精度浮点数。与C的double和Python的float对象兼容 |
float128 | 扩展精度浮点数 |
complex64、complex128 | 分别用两个32位 、64位或128位浮点数表示的复数 |
bool | 存储Ture和Flase值的布尔类型 |
object | Python对象类型 |
String_ | 固定长度的字符串类型 |
Unicode_ | 固定长度的Unicode类型(字节数由平台决定) |
dtype是一个特殊的对象,它含有ndarray将一块内存解释为特定数据类型所需的信息。
import numpy as np arr = np.array([1,2,3], dtype=np.float64)
arr.dtype arr.astype(np.float32) # 转换为dtype
二、数组和标量之间的运算
大小相等的数组之间的任何算术运算都会将运算应用到元素级别
import numpy as np arr1 = np.array([[1,2,3],[3,4,5]])
arr2 = np.array([[6,7,8],[9,10,11]]) '''
array([[ 7, 9, 11],
[12, 14, 16]])
'''
arr1 + arr2 '''
array([[-5, -5, -5],
[-6, -6, -6]])
'''
arr1 - arr2 '''
array([[ 6, 14, 24],
[27, 40, 55]])
'''
arr1 * arr2 '''
array([[ 0.16666667, 0.28571429, 0.375 ],
[ 0.33333333, 0.4 , 0.45454545]])
'''
arr1 / arr2
不同大小的数组之间的运算叫做广播(broadcasting)会在后面的内容中单独讲,本身是一个非常重要的概念
三、基本的索引和切片
一维数组的索引和切片和Python列表的功能差不多,这里只做简单的举例,不做更多说明。
区别的地方需要单独说明:1、在numpy的数组中,如果你将一个标量值赋值给一个切片时,例如arr[3:4] = 8,该值就会自动赋值给这个切片选区中,即(3,4]位置上的值都变成8;2、numpy中数组的切片时原始数组的视图,数据不会被复制,视图上的任何修改都会直接反应到原数组上。
import numpy as np arr = np.array([1,2,3,4,5,6]) arr[2,4] = 44 '''
array([1,2,44,44,5,6])
'''
print(arr)
二维数组中,各个索引位置上的元素不再是标量而是一维数组,依次类推多维也是这样
import numpy as np arr2d = np.array([[1,2,3],[2,3,4],[3,4,5]]) '''
array([3,4,5])
'''
arr2d[2] arr2d[0][2] # 等价于 arr2d[0,2]
二维数组的索引方式:纵轴表示 axis0,横轴表示axis1
ndarray的切片语法跟Python列表这样的一维对象差不多,在多维度上也是一样的,但是我们需要记住各个索引位置的元素不再是标量二维一维数组
import numpty as np arr = np.array([[1,2,3],[2,3,4],[3,4,5],[4,5,6]]) '''
array([[1,2,3],[2,3,4]])
'''
arr[:2]
import numpty as np arr = np.array([[1,2,3],[2,3,4],[3,4,5],[4,5,6]]) '''
array([[1],[2]])
'''
arr[:2,:,1]
四、布尔型索引
可以对ndarray中的数据做布尔类型的判断截取
import numpy as np arr = np.array([[1,2,3,4,5],[2,3,4,5,6],[3,4,5,6,7]]) '''
array([4, 5, 4, 5, 6, 4, 5, 6, 7])
'''
arr[arr > 3] '''
array([3, 3, 3])
'''
arr[arr == 3] '''
array([1, 2, 2])
'''
arr[arr < 3]
五、花式索引
花式索引(Fancy indexing)是一个Numpy术语,它指的是利用整数数组进行索引。
为了以特定顺序选取行子集,只需要传入一个用于指定顺序的整数列表或者ndarray,以下为例子:
import numpy as np '''
array([[ 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.]])
'''
arr '''
array([[ 4., 4., 4., 4.],
[ 3., 3., 3., 3.],
[ 0., 0., 0., 0.],
[ 6., 6., 6., 6.]])
'''
arrr[[4,3,0,6]] # 传入了指定顺序的整数列,4,3,0,6是顺序 arr[[-1,-2,-5]] # 负数从尾部开始取,顺序
一次传入多个索引数组的情况,以下为实例:
import numpy as np '''
array([[ 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]])
'''
arr = np.arange(32).reshape((8,4)) '''
array([4,23,29,10])
'''
arr[[1,5,7,2],[0,3,1,2]] #最终取出的数据是 坐标(1,0)(5,3)(7,1)(2,2) '''
array([[ 4, 7, 5, 6],
[20, 23, 21, 22],
[28, 31, 29, 30],
[ 8, 11, 9, 10]])
'''
arr[[1,5,7,2]][:,[0,3,1,2]] # 获取矩形区域 '''
np.ix() 将两个一维整数数组转换为一个用于选取方形区域的索引器
'''
arr[np.ix([1,5,7,2],[0,3,1,2])] # 得到和上面一样的结果
六、常用一元函数
函数 | 说明 |
abs、fabs | 计算整数、浮点数或复数的绝对值。对于非复数值,可以使用更快的fabs |
sqrt | 计算各元素的平方根。相当于arr**0.5 |
square | 计算各元素的平方。相当于arr**2 |
exp | 计算各元素的指数 |
log log10 log2 log1p | 分别为自然对数(底数为e)、底数为10的log、底数为2的log 、 log(1+x) |
sign | 计算各元素的正负号:1正数,0零,-1负数 |
ceil | 计算各元素的ceiling值,即大于等于该值的最小整数 |
floor | 计算各元素的floor值,即小于等于该值的最大整数 |
rint | 将各元素值四舍五入到最接近的整数,保留dtype |
modf | 将数组的小数和整数部分以两个独立数组的形式返回 |
isnan | 返回一个表示NAN的布尔型数组 |
isfinite isinf | 分别返回一个表示,那些元素是有穷的 或者 哪些元素是无穷的 布尔类型数组 |
cos cosh sin sinh | 普通型和双曲型三角函数 |
arccos arccosh arcsin arcsinh arctan arctanh |
反三角函数 |
logical_not | 计算各元素not x的真值。相当于-arr |
七、二元常用函数
函数 | 说明 |
add | 将数组中对应的元素相加 |
subtract | 从第一个数组中减去第二个数组中的元素 |
multiply | 数组元素相乘 |
divide、floor_divide | 除法或向下圆除法 |
power | 对第一个数组中的元素A,根据第二个数组中的相应元素B,计算AB |
maximum、fmax | 计算元素级的最大值 fmax将忽略NaN |
minimum、fmin | 计算元素级的最小值计算 fmin将忽略NaN |
mod | 元素级的求模计算(除法的余数) |
copysign | 将第二个数组中的值的符号复制给第一个数组中的值 |
greater、greater_equal less、less_equal equal、not_equal |
执行元素级的比较运算,最终产生布尔型数组。相当于> >= <= < == != |
logical_and logical_or logical_xor |
执行元素级的真值逻辑运算。相当于& | ^ |
八、基本数组统计方法
方法 | 说明 |
sum | 对数组中全部或某轴向的元素求和。零长度的数组和sum为0 |
mean | 算术平均数。零长度的数组的mean为NAN |
std、var | 分别为标准差和方差,自由度可调(默认为n) |
min、max | 最大值和最小值 |
argmin、argmax | 分别为最大和最小元素的索引 |
cumsum | 所有元素的累计和 |
comprod | 所有元素的累计积 |
作为布尔类型数组的方法
arr.any() 数组中是否存在一个或多个True
arr.all() 数组中是否所有的值都为True
排序:arr.sort() 返回排序后的数组
九、数组的集合运算
方法 | 说明 |
unique(x) | 计算x中的唯一元素,并返回有序结果 |
intersect1d(x,y) | 计算x和y中的公共元素,并返回有序结果 |
union1d(x,y) | 计算x和y的并集,并返回有序结果 |
in1d(x,y) | 得到一个表示‘x的元素是包含于y’的布尔数组 |
setdiff1d(x,y) | 集合的差,即元素在x中且不在y中 |
setxor1d(x,y) | 集合的对称差,即存在于一个数组中单不同时存在于两个数组中的元素 |
内容参考自《利用Python进行数据分析》
Numpy基础学习的更多相关文章
- Numpy基础学习与总结
Numpy类型学习 1.数组的表示 import numpy as np In [2]: #numpy核心是高维数组,库中的ndarray支持多维数组,同时提供了数值运算,可对向量矩阵进行运算 In ...
- Python 读取UCI iris数据集分析、numpy基础学习
python基础.numpy使用.io读取数据集.数据处理转换与简单分析.读取UCI iris数据集中鸢尾花的萼片.花瓣长度数据,进行数据清理,去重,排序,并求出和.累积和.均值.标准差.方差.最大值 ...
- Numpy 基础学习
numpy.array() 功能:创建一个数据 vector = numpy.array([1,2,3,4]) matrix = numpy.array([1,2,3,4],[11,12,13,14] ...
- [学习笔记] Numpy基础 系统学习
[学习笔记] Numpy基础 上专业选修<数据分析程序设计>课程,老师串讲了Numpy基础,边听边用jupyter敲了下--理解+笔记. 老师讲的很全很系统,有些点没有记录,在PPT里就不 ...
- 【学习笔记】 第04章 NumPy基础:数组和矢量计算
前言 正式开始学习Numpy,参考用书是<用Python进行数据清洗>,计划本周五之前把本书读完,关键代码全部实现一遍 NumPy基础:数组和矢量计算 按照书中所示,要搞明白具体的性能差距 ...
- 18-09-21 numpy 的基础学习01
# 1关于numpy 的学习import numpy as np # 一 如何创建数组****# 1 有规律的一维数据的创建======# 1 range() 和arange() 区别 貌似没有区别l ...
- python学习笔记(三):numpy基础
Counter函数可以对列表中数据进行统计每一个有多少种 most_common(10)可以提取前十位 from collections import Counter a = ['q','q','w' ...
- Day1 Python基础学习
一.编程语言分类 1.简介 机器语言:站在计算机的角度,说计算机能听懂的语言,那就是直接用二进制编程,直接操作硬件 汇编语言:站在计算机的角度,简写的英文标识符取代二进制去编写程序,本质仍然是直接操作 ...
- numpy 基础操作
Numpy 基础操作¶ 以numpy的基本数据例子来学习numpy基本数据处理方法 主要内容有: 创建数组 数组维度转换 数据选区和切片 数组数据计算 随机数 数据合并 数据统计计算 In [1]: ...
随机推荐
- 2016广东工业大学新生杯决赛网络同步赛暨全国新生邀请赛 题解&源码
Problem A: pigofzhou的巧克力棒 Description 众所周知,pigofzhou有许多妹子.有一天,pigofzhou得到了一根巧克力棒,他想把这根巧克力棒分给他的妹子们.具体 ...
- HDU 2639 Bone Collector II(01背包变形【第K大最优解】)
Bone Collector II Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- HDU2973(威尔逊定理)
YAPTCHA Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- NYOJ201作业题
作业题 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 小白同学这学期有一门课程叫做<数值计算方法>,这是一门有效使用数字计算机求数学问题近似解的方法与过程, ...
- linux下如何删除文件夹?
直接rm就可以了,不过要加两个参数-rf 即:rm -rf 目录名字-r 就是向下递归,不管有多少级目录,一并删除:-f 就是直接强行删除,不作任何提示的意思. 例如:删除文件夹实例: rm -rf ...
- 向ajaxform和ajaxgrid中添加数据
--ajaxform function add(){ $.request({ action:"add", success:onaddcomplete }); } function ...
- [国嵌攻略][152][I2C总线介绍]
IIC电气特性 I2C(inter intergrated circuit)总线是由philps公司开发的两线式串行总线,用于连接微控制器及其外围设备. I2C总线只有两根双向信号线: SDA:ser ...
- Element类型知识大全
Element类型 除了Document类型之外,Element类型就要算是Web编程中最常用的类型了.Element类型用于表现XML或HTML元素,提供了对元素标签名.子节点及特性的访问. 要 ...
- jsp页面固定页面为绝对路径
1 <!-- 固定到绝对路径 --> 2 <base href="<%=request.getContextPath()%>/"/>
- b2b2c
编辑 B2B2C是一种电子商务类型的网络购物商业模式,B是BUSINESS的简称,C是CUSTOMER的简称,第一个B指的是商品或服务的供应商,第二个B指的是从事电子商务的企业,C则是表示消费者. ...