NumPy库入门
来源:互联网 发布:淘宝号如何实名认证 编辑:程序博客网 时间:2024/06/01 10:35
数据维度与NumPy库简介
一维数据
- 定义
一维数据由对等关系的有序或无序数据构成,采用线性方式组织;
3.1413, 3.1398, 3.1404, 3.1401, 3.1349, 3.1376
对应列表、数据和集合等概念。
列表和数组
- 都是表达一组数据的有序结构的类型;
- 列表的数据类型可以不同(例如),数组的数据类型必须相同;
3.1413, 'pi', 3.1404, [3.1401, 3.1349], '3.1376'
二维数据
二维数据由多个一维数据组成,是一维数据的组合形式。例如:表格;
多维数据
多维数据由一维或二维数据在新维度上扩展而成,比如:三年的中国大学排名表,它是二维数据表格在时间维度上的扩展。
数据维度的Python表示
- 一维数据:列表(有序)和集合(无序)类型;
- 二维数据/多维数据:多位列表类型;
- 高维数据:字典类型;
NumPy库
简介
NumPy是一个开源的Python科学计算基础库,它具有如下特点:
- 一个强大的N维数组处理对象ndarray;
- 广播功能函数;
- 整合C/C++/Fortran代码的工具;
引入NumPy库的同时需要将他命名为约定俗成的别名:np
import numpy as np
N维数组对象ndarray
- 为什么要使用ndarray
例:计算A^2 + B^3 ,其中A和B是一维数组。使用普通Python语言编程如下:
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 cprint(pySum())
可以看到,在进行计算时,必须通过循环的逻辑,具体到数组的具体元素之间的运算,不直观也不方便。
使用NumPy编程如下:
def npSum(): a = np.array([0, 1, 2, 3, 4]) b = np.array([9, 8, 7, 6 ,5]) c = a ** 2 + b ** 3return cprint(npSum())
可以看到,借助NumPy的帮助,程序员可以直接把数组看做具体元素,直接进行运算,大大简化了步骤。
- ndarray简介
ndarray是一个多维数组对象,由两部分构成:实际的数据,描述这些数据的元数据(数据维度、数据类型等)。
ndarray数组一般要求数组中所有元素类型相同,数组下标从0开始。
- ndarray实例
使用如下命令生成一个ndarray数组;
np.array()
ndarray输出成[]形式,元素由空格分离。他有两个基本参量:轴(保存数据的维度)与秩(轴的数量)。
ndarray对象的属性
- .ndim:秩,即轴的数量或维度的数量;
- .shape:ndarray对象的尺度,对于矩阵,n行m列,返回(n, m);
- .size:ndarray对象元素的个数,相当于.shape中的n和m的值;
- .dtype:ndarray对象的元素类型;
- .itemsize:ndarray对象中每个元素的大小,以字节为单位。
ndarray数组的创建方法
- 从Python中的列表、元祖等类型创建ndarray数组;
- 使用NumPy中创建ndarray数组的函数,如ones,zeros等;
- 从字节流中创建ndarray数组;
- 从文件中读取特定格式,创建ndarray数组;
从Python中的列表、元祖等类型创建ndarray数组
np.array(list/tuple)
在创建数组时可以使用dtype来指定数组中元素的数据类型:
np.array(list/tuple, dtype = np.float32)
使用NumPy中创建ndarray数组的函数,如ones,zeros等
- np.arange(n):返回ndarray类型的一个范围是[0, n - 1]的递增整数序列;
- np.ones((m, n)):生成一个m行n列的全1矩阵;
- np.zreos((m, n)):生成一个m行n列的全0矩阵;
- np.eyes(n):生成n阶单位阵;
- np.full((m, n), val:生成一个m行n列,值全为val的数组);
- .shape:返回当前数组的大小,例如:
x = np.ones((2, 3, 4))x.shape
输出结果:(2, 3, 4)
- np.ones_like(a):根据数组a的形状生成一个全1数组;
- np.zeros_like(a):根据数组a的形状生成一个全0数组;
- np.full_like(a, val):根据数组a的形状生成一个数组,每个元素都是val;
- np.linspace(start, end, number):生成一个从start开始到number结束,等间距排列的数组,一共有number个元素。默认类型为浮点型,例如:
a = np.linspace(1, 10, 4)b = np.linspace(1, 10, 4, endpoint = False)
输出结果:
a = array([1., 4,. 7,. 10.])b = array([1., 3.25, 5.5, 7.75])
其中,endpoint = False表示end值不作为数组的最后一个元素。
np.concatenate((a, b)):将a,b数组合并,b数组直接接在a数组后面。
- ndarray数组的维度变换
.reshape(shape):数组元素和总个数不变,返回一个shape形状的数组,原数组不变;
- .resize(shape):与.reshape()功能一致,但修改原数组;
- .swapaxes(ax1, ax2):将数组n个维度中的两个维度进行调换;
.flatten():对数组进行降维,返回折叠后的一维数组,原数组不变。
ndarray数组的类型变换
.astype(new_type):将原数组中的元素类型修改为new_type,原数组不变。ndarray数组向列表转换
.tolist():将原数组转换为Python中的列表类型。
ndarray数组的索引和切片
- 一维数组的索引和切片:与Python的列表类似;
a = np.array([9, 8, 7, 6, 5])a[1 : 4 : 2]
输出结果:array([8, 6]);
- 多维数组的索引:
a = np.arange(24).reshape((2, 3, 4))a[1, 2, 3]a[0, 1, 2]a[-1, -2, -3]
输出结果:23 6 17
- 多维数组的切片
a = np.arange(24).reshape((2, 3, 4))a[:, 1, -3]a[:, 1 : 3, :]a[:, :, ::2] #以2为步长获取其中的值
输出结果:
array([5, 17])array([[[4, 5, 6, 7], [8, 9, 10, 11]], [[16, 17, 18, 19], [20, 21, 22, 23]]])array([[[0, 2], [4, 6], [8, 10]], [[12, 14], [16, 18], [20, 22]]])
ndarray数组的运算
- 数组与表量之间的运算
实例:计算a与a中所有元素平均值的商:
- 数组与表量之间的运算
a = np.arange(24).reshape((2, 3, 4))a = a / a.mean()
输出结果为一个2层3行4列的数组,数组中的每个元素是原来a中的每个元素除以原来a中所有元素平均值的商
- NumPy一元函数
np.abs(x), np.fabs(x) #计算数组个元素的绝对值np.sqrt(x) #计算数组个元素的平方根np.square(x) #计算数组各元素的平方np.log(x), np,log10(x), np.log2(x) #计算数组个元素的自然对数、10底对数和2底对数np.ceil(x), np.follor(x) #计算数组个元素的向上取整值和向下取整值np.rint(x) #计算数组个元素的四舍五入值np.modf(x) #将数组个元素的小数和整数部分以两个独立数组形式返回np.cos(x), np.cosh(x) #计算数组各元素的普通型和双曲型三角函数np.exp(x) # 计算数组个元素的符号值,1代表+,-1代表-,0代表值为0
这些函数都是新生成数组作为结果,原数组不变。
- NumPy二元函数
+ - * / ** #两个数组各元素进行对应运算np.maximum(x, y), np.fmax() #元素级的最大值计算np.minimum(x, y), np,fmin() #元素级的最小值计算np.mod(x, y) #元素级的模运算np,copysign(x, y) #将数组y中各元素值得符号赋值给数组x对应元素> < >= <= == != #算数比较,产生布尔型数组
- NumPy库入门
- NumPy库入门
- 数据分析Numpy库入门
- Numpy 入门
- numpy入门
- Numpy入门
- numpy:入门
- NumPy基础入门学习
- python+opencv+numpy入门
- [python]Numpy快速入门
- NumPy快速入门
- [NumPy]入门-学习笔记
- numpy入门1
- numpy入门学习笔记
- numpy简单入门学习
- numpy入门总结
- numpy入门2
- NumPy快速入门
- 计算两个非负整数的最大公约数
- JAVA打印乘法表
- JavaScript的Date(动态显示时间)
- 使用Visual Studio Code搭建TypeScript开发环境
- Python 安装numpy+scipy+matlotlib
- NumPy库入门
- 史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka)
- HDU 1875 畅通工程再续
- (二)、Java复习笔记之面向对象
- Liunx tomcat安装
- Java --- 单例模式(二) 七种写法
- javascript----原型总结(1)
- SQL 函数 笔记((Structured Query Language)
- Java| Java异常新理解RuntimeException(不抛出异常,程序运行时出错会有错误信息)