Python——NumPy库入门
1、数据的纬度
维度:一组数据的组织形式
1.1 一维数据
一维数据由对等关系的有序或无序数据构成,采用线性方式组织 ,对应列表、数组和集合等概念
列表:数据类型可以不同 ,如 3.1413, 'pi', 3.1404, [3.1401, 3.1349], '3.1376'
数组:数据类型相同 。如:3.1413, 3.1398, 3.1404, 3.1401, 3.1349, 3.1376
1.2 二维数据
二维数据由多个一维数据构成,是一维数据的组合形式。表格是典型的二维数据其中,表头是二维数据的一部分 。
1.3 多维数据
多维数据由一维或二维数据在新维度上扩展形成
1.4 高维数据
高维数据仅利用最基本的二元关系展示数据间的复杂结构
2、NumPy的数组对象:ndarray
NumPy是一个开源的Python科学计算基础库,包含:
• 一个强大的N维数组对象 ndarray
• 广播功能函数
• 整合C/C++/Fortran代码的工具
• 线性代数、傅里叶变换、随机数生成等功能
NumPy是SciPy、 Pandas等数据处理或科学计算库的基础
2.1 NumPy的引用
2.2 N维数组对象:ndarray
例:计算 A2+B3,其中,A和B是一维数组 。
def pysum():
a=[0,1,2,3,4]
b=[9,8,7,6,5]
c=[]
for i in range(len(a)):
c.append(a[i]**2+b[i]**3) return c
print(pysum())
利用python 已有的列表类型和循环的方法可以求出结果,但是程序繁琐。
>>> print (npsum())
None
>>> import numpy as np
>>> def npsum():
a=np.array([0,1,2,3,4])
b=np.array([9,8,7,6,5])
c=a**2+b**3
return c
>>> print(npsum())
[729 513 347 225 141]
利用numpy方式编程,可以看出,并没有使用循环,更简洁。
2.2.1
• 数组对象可以去掉元素间运算所需的循环,使一维向量更像单个数据
• 设置专门的数组对象,经过优化,可以提升这类应用的运算速度
观察:科学计算中,一个维度所有数据的类型往往相同
• 数组对象采用相同的数据类型,有助于节省运算和存储空间
ndarray是一个多维数组对象,由两部分构成:
• 实际的数据
• 描述这些数据的元数据(数据维度、数据类型等)ndarray数组一般要求所有元素类型相同(同质),数组下标从0开始
2.2.2
np.array()输出成[]形式,元素由空格分割 。
8位(0或者1)组成一个字节。
2.3
2.3.1ndarray数组的元素类型
对比:Python语法仅支持整数、浮点数和复数3种类型
• 科学计算涉及数据较多,对存储和性能都有较高要求
• 对元素类型精细定义,有助于NumPy合理使用存储空间并优化性能
• 对元素类型精细定义,有助于程序员对程序规模有合理评估
2.3.2
非同质的ndarray
非同质ndarray对象无法有效发挥NumPy优势,尽量避免使用
2.4 ndarray数组的创建
创建方法
• 从Python中的列表、元组等类型创建ndarray数组
• 使用NumPy中函数创建ndarray数组,如:arange, ones, zeros等
• 从字节流(raw bytes)中创建ndarray数组
• 从文件中读取特定格式,创建ndarray数组
2.4.1 从Python中的列表、元组等类型创建ndarray数组
x = np.array(list/tuple)
x = np.array(list/tuple, dtype=np.float32)
2.4.2 使用NumPy中函数创建ndarray数组,如:arange, ones, zeros等
2.5 ndarray数组的变换
2.5.1 纬度的变换
a并没有发生变化
a发生改变
输出一维,但是a并没有发生变化
2.5.2 ndarray数组的类型变换
new_a = a.astype(new_type)
2.5.3 ndarray数组向列表的转换
ls = a.tolist()
2.6 ndarray数组的操作
数组的索引和切片
索引:找到特定位置的数据
切片:找到特定位置的一组数据
一维数组的索引和切片:与Python的列表类似
多维数组的索引:
多维数组的切片:
2.7 ndarray数组的运算
2.7.1 数组与标量之间的运算
2.7.2 NumPy一元函数
2.7.3NumPy二元函数
最新文章
- YYStock开源----iOS股票K线绘制第二版
- svn检出的时候报 Unable to connect to a repository at URL错误(摘自CSDN)
- NOIP2001 一元三次方程求解[导数+牛顿迭代法]
- OC语言中BOOL 和 bool 区别
- 键盘键与虚拟键码对照表+delphi虚拟键码对应关键
- 基础调试命令 - .dump/.dumpcap/.writemem/!runaway
- rabbitmq使用
- tp_link路由器 重新设置
- 【转】What is an entity system framework for game development?
- C++实现日期类(Date类)
- 各种浏览器兼容篡位的css样式写法
- php字符串递增
- 用div画三角/矩形/圆
- Linux深入理解Socket异常
- 苹果手机显示分享链接的方法html页面
- Wampserver配置与本地建站
- 如何在编辑器里添加CSS或JS代码
- yersinia的DHCP池耗尽断网攻击
- HTTP2.0探究
- Leetcode题库——33.搜索旋转排序数组
热门文章
- Error : Failed to get convolution algorithm. This is probably because cuDNN failed to initialize
- 简单服务器端Blazor Cookie身份验证的演示
- socket TCP 从0实现音频传输 ALSA 播放
- 安卓 打飞机 app 开发 第一篇
- PageRank 算法初步了解
- 原生ajax动态添加数据
- Asp.Net Core 中IdentityServer4 授权原理及刷新Token的应用
- HBU-数据库第五周作业
- 常用的API和基础算法
- 将SublimeText加入右键菜单