这是继我的上一篇博客
《环境安装血泪史之人工智能劝退篇(anaconda3+cuda10.2+cudnn7.6+tensorflow-gpu2.1.0)win10系统的gpu版》后的关于tensorflow2.0的学习第一篇前奏笔记,要学习机器学习建议先了解以下python有关数据分析的第三方库,这里的推荐课程 中国大学mooc 北京理工大学开设的python数据可视化教程,里面系统讲解了numpy,matplotlib以及pandas库,建议在学习课程前先安装anaconda。
这篇笔记是对mooc所讲numpy库的个人整理,资料来源于 中国大学mooc 北京理工大学开设的python数据可视化教程
NumPyNumPy是一个开源的Python科学计算基础库,包含:
•一个强大的N维数组对象ndarray
•广播功能函数•整合C/C++/Fortran代码的工具
•线性代数、傅里叶变换、随机数生成等功能NumPy是SciPy、Pandas等数据处理或科学计算库的基础
例如我现在有一组数据:11,22,33,44,55,66,77,88,99,00
我们再将其按照一维展开:
11 | 22 | 33 | 44 | 55 | 66 | 77 | 88 | 99 | 00 |
---|
我们再将其按照一维展开:
11 | 22 | 33 | 44 | 55 |
---|---|---|---|---|
66 | 77 | 88 | 99 | 00 |
我们可以看到数据在二维和一维的展开形式不同。不同维度他的组织形式不同
一维数据
注意python里面是没有基本数据类型里数组的,但我们可以通过numpy库来创建一个数组
二维数据
如图是大学排行,我们可以看到这个二维数据是由多个一维组成每一行都可以看成是一组一维数据
多维数据
我们可以看到我们在原二维数据中引入了时间维度,所以这个多维数据可以说是由原二维数据加上一个表示时间的数据组成的新数据
高维数据
这与我们python中的字典类型是对应的
ndarray是一个多维数组对象,由两部分构成:
1•实际的数据
2•描述这些数据的元数据(数据维度、数据类型等)
ndarray数组一般要求所有元素类型相同(同质),数组下标从0开始
Python已有列表类型,为什么需要一个数组对象(类型)?
1•数组对象可以去掉元素间运算所需的循环,使一维向量更像单个数据
2•设置专门的数组对象,经过优化,可以提升这类应用的运算速度
我们上个例子来对比一下python对列表的传统操作以及numpy的数组对象操作的区别
假设:我们有一组数据A=[1,2,3,4,5,6],我们想知道他所有元素的平方
传统上python需要使用循环
def A_square():
A=[1,2,3,4,5,6]
C=[]
for i in range(len(A)):
C.append(A[i]**2)
而我们通过创建一个ndarray数组对象可以不用循环
import numpy as np#引入numpy库
def A_square():
A=np.array([1,2,3,4,5,6])#ndarray在程序里的别名叫做array
C=A**2
我们来上手试一下:
由于我产生了一个一维数组所以a.ndim和a.shape表示都有一点不清楚
我们来进行以下修改:
这里将通过reshape()(后面会有介绍)方法将其改造成了一个二维数组,我们可以看到a.ndim变成了2
或许在上面你对a.dtype,dtype(int32)感到疑惑,其实这是ndarray数组的众多元素类型的其中一个
ndarray的元素类型ndarray为什么要支持这么多种元素类型?对比:Python语法仅支持整数、浮点数和复数3种类型
•科学计算涉及数据较多,对存储和性能都有较高要求
•对元素类型精细定义,有助于NumPy合理使用存储空间并优化性能
•对元素类型精细定义,有助于程序员对程序规模有合理评估
1.•从Python中的列表、元组等类型创建ndarray数组
2.•使用NumPy中函数创建ndarray数组,如:arange, ones, zeros等
3.•从字节流(raw bytes)中创建ndarray数组
4.•从文件中读取特定格式,创建ndarray数组
方法一:通过python中的列表,元组来创建
对于创建后的ndarray数组,可以对其进行维度变换和元素类型变换
主要有astype方法:a.astype(new_type),()里填上要转换成的元素新类型。astype()方法一定会创建新的数组(原始数据的一个拷贝),即使两个类型一致
ls = a.tolist()这个方法将a数组变成一个python列表
一维数组的索引切片操作和python序列的索引操作相似
多维数组的每个维度之间用逗号分隔,单个维度的操作与一维数组相似:
规则:与线性代数里的矩阵一样,数组与标量之间的运算作用于数组每一个元素;
例如:
这份笔记是关于numpy的基本操作的理论知识,比较简单。大部分图片来自mooc北京理工大学嵩天老师的python数据可视化课程
下一份博客,我将根据这份笔记,每个知识点每个函数给出一个例子