Numpy ndarray:多维数组对象(使用jupyter notebook进行探索)

Numpy的核心特征之一就是N-维数组对象——ndarray。ndarray是Python中一个快速、灵活的大型数组容器。数组允许使用类似于标量的操作语法在整块数据上进行数学计算。

1.生成ndarray

生成数组最简单的方式就是array函数,array函数接收任意的序列行对象(也包括其他的数组),生成一个新的包含数据的Numpy数组。
例:将python列表转化为数组。
Numpy ndarray:多维数组对象(使用jupyter notebook进行探索)_第1张图片
或者利用numpy数组生成函数进行操作
以np.arange举例,取值范围从0-49,步长为2生成Numpy数组:
在这里插入图片描述
数组生成函数

函数名 描述
array 将输入数据(可以是列表、元组、数组以及其他序列)转换为ndarray,如不显式指明数据类型,则自动推断;默认复制所有的输入数据
asarray 将输入转换为ndarray,但如果输入已经是ndarray则不再赋值
arange Python内建函数range的数组版,返回一个数组
ones 根据给定形状和数据类型生成全为1的数组
ones_like 根据所给的数组生成一个形状一样全为1的数组
zeros 根据给定形状和数据类型生成全为0的数组
zeros_like 根据所给的数组生成一个形状一样全为0的数组
empty 根据给定形状生成一个形状一样但没有初始化数值的空数组(注意,空不代表为0)
empty_like 根据所给数组生成一个形状一样但没有初始化数值的空数组
full 根据给定形状和数据类型生生成指定数值的数组
full_like 根据所给的数组生成一个形状一样但内容是指定数值的数组
eye, identity 生成一个N × N特征举证(对角线位置都是1,其余位置是0)

2.查看ndarray的属性与数据类型

查看数组的维数用.ndim方法
查看数组的形状用.shape方法
查看数组的数据类型用.dtype方法
查看数组的大小用.size方法
查看数组的每个元素所占字节数用.itemsize方法

举例:查看数组Z的维数、形状、数据类型、大小、以及计算数组的内存大小
Numpy ndarray:多维数组对象(使用jupyter notebook进行探索)_第2张图片

3.ndarray的数据类型

numpy的数据类型,即dtype,是一个特殊的对象,它包含了ndarry需要为某一种类型数据所申明的内存块信息(也称为元数据,即表示数据的数据),其可以在创建数组时指定。:
Numpy ndarray:多维数组对象(使用jupyter notebook进行探索)_第3张图片
也可以由.astype方法显式地转换数组的数据类型
例:int类型与float类型的互转,注意,当float类型转为int类型后,小数点后被抹去
Numpy ndarray:多维数组对象(使用jupyter notebook进行探索)_第4张图片
dtype通常按照一个方式命令:类型名,比如int与float,后面接上表明每个元素位数的数字。一个标准的双精度浮点值(pythpn中称为float),将使用8字节或64位,因此这个类型在Numpy中称为float64。

Numpy数据类型

类型 类型代码 描述
int8, uint8 i1,u1 有符号和无符号的8数位整数
int16, uint16 i2,u2 有符号和无符号的16数位整数
int32,uint32 i4,u4 有符号和无符号的32数位整数
int64,uint64 i8,u8 有符号和无符号的64数位整数
float16, f2 半精度浮点数
float32 f4或f 标准单精度浮点数;兼容C语言float
float64 f8或d 标准双精度浮点数;兼容C语言double和Python float
float128 f16或g 拓展精度浮点数
complex64 c8,c16,c32 分别基于32、64、128位浮点数的复数
complex128
complex256
bool ? 布尔值,存储True或False
object O Python object类型
string_ S 修正的ASC II 字符串类型;如生成一个长度为10的字符串类型,使用‘s10’
unicode_ U Unicode类型,使用‘U10’

可以使用np.iinfo(int数据类型)np.finfo(float数据类型)查看每种数据类型的取值范围:
示例:
Numpy ndarray:多维数组对象(使用jupyter notebook进行探索)_第5张图片
Numpy ndarray:多维数组对象(使用jupyter notebook进行探索)_第6张图片
不必担心如何记住Numpy数据类型,尤其是刚接触numpy的时候。通常只需要关心数据类型的大类,如整数、浮点型、布尔值或字符串等。

4.Numpy数组算术

numpy对于用户最重要的特性即为向量化,因为数组允许进行批量计算而无需使用for循环。
任何两个等尺寸数组之间的算数操作都应用了逐元素操作的方式
数组之间的对应元素举例:乘法(此处与线性代数的矩阵乘法不同),减法
Numpy ndarray:多维数组对象(使用jupyter notebook进行探索)_第7张图片
带有标量的算数操作,会把标量作为计算参数传递给每一个元素:
Numpy ndarray:多维数组对象(使用jupyter notebook进行探索)_第8张图片
同尺寸数组之间的比较,会产生一个布尔值数组:
Numpy ndarray:多维数组对象(使用jupyter notebook进行探索)_第9张图片
不同尺寸的书组件操作,将会使用到numpy的广播特性。

5.numpy基础数组索引与切片

5.1一维数组索引与切片

与python列表类似
Numpy ndarray:多维数组对象(使用jupyter notebook进行探索)_第10张图片
当传入一个数值给数组的切片,如 arr[5:8] = 12,数值被传递给了整个数组。此处与python内建列表不同,对数组的切片值直接作用在原数组上的,而不是使用切片赋值成新的数组。因为numpy是为处理大数组设计的,如果持续复制数据,将会引起内存问题。:
Numpy ndarray:多维数组对象(使用jupyter notebook进行探索)_第11张图片
如果想要拷贝一份数组的切片而不是用作视图查看的话,则必须复制该数组,如arr[5:8].copy()

5.2 高维数组索引与切片

对于二维数组,每个索引值对应的元素不再是一个值而是一个数组:
Numpy ndarray:多维数组对象(使用jupyter notebook进行探索)_第12张图片
单个元素的索引可以通过递归的方式获得:
在这里插入图片描述
numpy中二维数组将0轴看作”行“,1轴看作”列“。在更高维的数组中,0轴表示最外层数组的索引号,最小的数字轴表示最内层数组的索引号。
如对于三维数组:
Numpy ndarray:多维数组对象(使用jupyter notebook进行探索)_第13张图片
标量和数组都可以传递给 a r r 3 d [ 0 ] arr3d[0] arr3d[0]
Numpy ndarray:多维数组对象(使用jupyter notebook进行探索)_第14张图片
与二维数组类似, a r r 3 d [ 1 , 0 ] arr3d[1,0] arr3d[1,0]返回的是一个一维数组:
在这里插入图片描述

5.3数组的切片索引举例

一维数组
注意:numpy索引从0开始,1:6,从1开始到6为止(不包括6)
Numpy ndarray:多维数组对象(使用jupyter notebook进行探索)_第15张图片
二维数组
Numpy ndarray:多维数组对象(使用jupyter notebook进行探索)_第16张图片
上例中数组沿0轴开始切片,表达式 a r r z d [ : 2 ] arrzd[:2] arrzd[:2]的含义为选择 a r r z d arrzd arrzd的前两“行”。
多组切片:
Numpy ndarray:多维数组对象(使用jupyter notebook进行探索)_第17张图片
单独一个冒号表示选择整个轴上的数组,因此可以按照如下方式进行更高维度的切片:
Numpy ndarray:多维数组对象(使用jupyter notebook进行探索)_第18张图片
对切片进行赋值也会对原数组进行改变:
Numpy ndarray:多维数组对象(使用jupyter notebook进行探索)_第19张图片

6.布尔索引

考虑以下例子,假若我们关于人名的数据存放在了数组中,并且存在一些重复的人名:
Numpy ndarray:多维数组对象(使用jupyter notebook进行探索)_第20张图片
假设每个人名都和data数组中的一行相对应,并且我们想要选中所有‘Bob’的行。与数学操作类似,数组的比较操作(比如==)也是可以向量化的。因此names数组和字符串‘Bob’会产生一个布尔值数组:
在这里插入图片描述
在索引数组是可以传入给布尔值数组在这里插入图片描述
布尔值数组的长度必须和数组轴索引长度一致,当其不一致时,布尔值选择数据的方法不会报错,所以要小心使用。

我们也可以对布尔值索引使用切片操作:
Numpy ndarray:多维数组对象(使用jupyter notebook进行探索)_第21张图片
为了选择‘Bob’以外的数据,可以使用 != 或在条件表达式前使用~对条件取反:
Numpy ndarray:多维数组对象(使用jupyter notebook进行探索)_第22张图片
Numpy ndarray:多维数组对象(使用jupyter notebook进行探索)_第23张图片
当使用多个名字来组合时,需要使用布尔算术运算符(&或者|,使用and和or无效)
Numpy ndarray:多维数组对象(使用jupyter notebook进行探索)_第24张图片
使用常识设置布尔值数组:
Numpy ndarray:多维数组对象(使用jupyter notebook进行探索)_第25张图片

7.神奇索引

神奇索引是numpy的属于,用于使用整数数组进行数据索引
假设我们由8×4数组:
Numpy ndarray:多维数组对象(使用jupyter notebook进行探索)_第26张图片
我们可以通过传递一个包含指明所需顺序的列表或数组来选出符合特定顺序的子集
Numpy ndarray:多维数组对象(使用jupyter notebook进行探索)_第27张图片
也可以通过负的索引,从尾部开始进行选择:
Numpy ndarray:多维数组对象(使用jupyter notebook进行探索)_第28张图片
使用神奇索引对两个维度进行重新排列:
Numpy ndarray:多维数组对象(使用jupyter notebook进行探索)_第29张图片
若代码改为arr[[1, 5, 7, 2], [0, 3, 1, 2]]则结果为选出元素(1,0)、(5,3)、(7,1)和(2,2)
Numpy ndarray:多维数组对象(使用jupyter notebook进行探索)_第30张图片

8.数组转置与转轴

转置是一种特殊的数据重组形式,可以返回底层数据的视图而不需要复制任何内容
对于二维数组
使用.T方法或者transpose方法
Numpy ndarray:多维数组对象(使用jupyter notebook进行探索)_第31张图片

对于高维数组
使用transpose方法:
Numpy ndarray:多维数组对象(使用jupyter notebook进行探索)_第32张图片
点击进行下一章节学习:numpy常用函数(一元通用函数、二元通用函数列表)
或回到主目录:Numpy基础(基于jupyter notebook探索)

你可能感兴趣的:(Python-数据分析,python,numpy,数据分析)