数据分析入门学习笔记1——1.numpy库入门

##本文内容为北京理工大学嵩天教授在中国大学MOOC上发布的课程《python数据分析与展示》的学习笔记##

1.1数据的维度

1.11相关概念

维度:一组数据的组织形式

数据类型:列表、数组、集合

列表list:数据类型可以不同,但有序 【eg: [3.14,'pi',3.1404,[3.1401,3.1349,'3,1376']]】

数组array:数据类型需相同【eg: 3.1413,3.1398,3.1404,3.1401,3.1349】

列表和数组有着相同的索引机制(均从0开始),但使用print(),输出时数组中的元素通过空格分隔,列表中的元素通过逗号分隔。

集合set: 一般来讲数据类型相同或基类相同,集合的种类包括列表、集、多重集、树和图。

1.12数据维度

(1)一维数据

定义:由对等关系的有序或无序数据构成,采用线性方式组织

表示类型:列表类型或集合类型

列表list:数据类型可以不同,但有序 【eg: [3.1398,3.1349,3.1376]】

集合set:数据类型相同,但无序【eg: {3.1398,3.1349,3.1376}】

(2)二维数据

定义:由多个一维数据组成,是一维数据的组合形式。

表示类型:列表类型

(3)多维数据:

定义:由一维或二维数据在新维度上拓展而成

【eg:[ [3.1398,3.1349,3.1376],

[3.1413,3.1404,3.1401]]】

表示类型:列表类型

(4)高维数据:

定义:仅利用最基本的二元关系展示数据间的复杂结构(数据间的包含、并列、属性关系等),由键值对将数据组织起来形成的数据方式

表示类型:字典类型dict或数据表示格式(JSON\XML\YAMI格式)
 

1.2 Numpy的数组对象:ndarray

1.21numpy的引用:

import numpy 【as np】【】为可省略部分

1.22 ndarray一个强大的N维数组对象

为什么列表可以支持一维、

多维、高维数据的运算,仍设置数组?

(1)数组对象可以去掉元素间运算所需的循环,使一维向量更像单个数据。

#如果要计算两个一维数据的和,需用for循环得到一个个数据,然后再加总;但数组则可支持两个维度相同的一维数据直接加总#

(2)通过设置专门的数组对象,可以提高运算速度。

(3)数组对象采用相同的数据类型,有助于节省运算和存储空间

1.Ndarray由两部分组成

实际的数据+描述这些数据的元数据(数据维度、数据类型等)

2.使用:

np.array()生成一个ndarray数组ndarray在程序中的别名为array】

np.array()的输出为[]形式,打印(print)时元素由空格分隔

In: a=np.array([[0,1,2,3,4],
                [9,8,7,6,5]])
In: a
Out:
array([[0,1,2,3,4],
       [9,8,7,6,5]])
In: print(a)  #打印
[[0,1,2,3,4],
 [9,8,7,6,5]]

3.描述ndarray的基本形式:

轴(axis):保存数据的维度;秩(rank):轴的数量,数组维度的数量

4.一般要求

一般要求所有元素类型相同(同质),数组下标从0开始

但Ndarray数组也可由非同质对象构成,非同质ndarray元素表现为对象类型(o)/其将每个元素认定为一个对象(o),变相将不相同的元素认定为同质对象,故非同质ndarray对象无法发挥numpy优势。

In: a =np.array([[0,1,2,3,4],
                 [9,8,7,6]])
In: x.shape #ndarray对象的尺度(几行几列)
Out:(2,)
In: x.dtype # ndarray对象的元素类型
Out: dtype('o') #o类型
In: x.itemzize # ndarray对象中每个元素的大小
Out: 4
In: x.size # ndarray对象元素的个数
Out: 2

5.ndarray对象的属性

.ndim 秩,即轴的数量或维度的数量

.shape  ndarray对象的尺度(几维的,每个维度分别是多少);对于矩阵,n行m列

.size  ndarray对象元素的个数,相当于.shape中n*m的值

.dtype  ndarray对象的元素类型

.itemsize  ndarray对象中每个元素的大小,以字节为单位(便于计算存储空间)

6.ndarray的元素类型:

数据类型 说明
bool 布尔类型,True或False
inte 与C语言中的int类型一致,一般是int32 或int64
intp 用于索引的整数,与C语言中ssize_ t一致,int32或int64
in8 字节长度的整数,取值: |-128, 127]
int16 16位长度的整数,取值: [-32768, 32767]
int32 32位长度的整数,取值: |-231, 231-1]
int64 64位长度的整数,取值: 1-263, 263-1]
uint8

8位无符号整数,取值: [0, 255]

【无符号整数即非负数】

uint16 16位无符号整数,取值: [0, 65535]
uint32 32位无符号整数,取值: [0, 232-1]
uint64 64位无符号整数,取值: [0, 264-1|
float16 16位半精度浮点数: 1位符号位,5位指数,10位尾数
float32 32位半精度浮点数: 1位符号位,8位指数,23位尾数
float64 64位半精度浮点数: 1位符号位,11位指数,52位尾数
complex64

复数类型,实部和虚部都是32位浮点数

【复数由实部(.real)+j虚部(.imag)组成】

complex128 复数类型,实部和虚部都是64位浮点数

值得注意的是ndarray中经常使用np.int指一种int类型,但具体是int32,还是int64由计算机自行识别而后关联。同理还有np.float等


1.23ndarray的创建和变换

1.创建方法:

(1)从python中的列表list、元组tuple等类型创建ndarray数组

使用numpy的array函数,list/tuple/list+tuple混合类型作为参数输入(只要两者数据同质)

x=np.array(list/tuple,【数据类型】)

In: x=np.array(list/tuple,dtype=np.float32)

未指明数据类型时,numpy会根据数据情况关联类型,自动创建类型

(2)使用numpy函数创建,如array、ones、zeros函数

函数 说明、举例
np.eye(n) 创建一个正方的n*n单位矩阵, 对角线为1,其余为0
np.arange(n)

类似range()函数,返回ndarray类型, 元素从0到n-1

np.array(10),生成由从0到9的十个数字组成的数组

np.ones(shape)

根据shape生成一 个全1数组, shape是元组类型

np.ones((2,3)) 即生成一个2行3列的全1数组/两个元素,每个元素中有3个维度的全1数组

np.ones((2,3,4))即生成一个有两个元素,每个元素三个维度,每个维度4个元素的全1数组

np.zeros(shape) np.zeros(shape)根据shape生成一 个 全0数组,shape是元组类型
np.full(shape,val)

根据shape生成一个数组, 每个元素值都是val

np.full((2,3),25)

np.ones_ like(a) 根据数组a的形状生成一个 全1数组
np.zeros_ like(a) 根据数组a的形状生成一个 全0数组
np.full like(a,val) 根据数组a的形状生成一 个数组, 每个元素值都是val
np.linspace()

根据起止数据等间距地填充数据,形成数组

np.concatenate()

将两个或多个数组合并成一个新的数组

np.concatenate((a,b))

#np.ones((2,3))
In: x=np.ones((2,3))

In: print(x)
Out:[[1,1,1],
     [1,1,1]]

#np.ones((2,3,4))
In: x=np.ones((2,3,4))

In: print(x)
Out:
[[[1,1,1,1],
  [1,1,1,1],
  [1,1,1,1]],
 [[1,1,1,1],
  [1,1,1,1],
  [1,1,1,1]]]


np.linspace(起始数字, 终止数字,生成数组元素个数)
In: a= np.linspace(1, 10,4)

In: a
Out: array=([1.,4.,7.,10.])

In: b= np.linspace(1, 10,4,endpoint=False)

In: b
Out: array=([1.,3.25,5.5,7.75])

!!array生成的是整数,ones、zeros、eyes、linspace生成浮点类型

(3)从字节流(raw bytes)中创建

(4)从文件中读取特定格式,创建ndarray数组

2.数组的变化方法

(1)维度变换

方法 说明
.reshape(shape)

不改变数组元素,返回一个shape形状的数组,原数组不变

【原数组不变,则意味着将变换后的数组新生成为一个新数组返回】

数组a,通过a.reshape((n,m))命令变换后, 新生成另一数组

.resize(shape) 与.reshape0功能一致,但修改原数组
.swapaxes(ax1,ax2) 将数组n个维度中两个维度进行调换
.flatten() 对数组进行降维,返回折叠后的一-维数组,原数组不变

(2)元素类型变换【.astype()】

变换原数组的元素类型(new_type),.astype()一定会创建新的数组返回给用户(原数组已经发生改变),即使前后创建的两个数组类型一致

应用方式:新数组名=原数组名.astype(new_type)

eg: New_a=a.astype(np.float)

(3)adarray数组向列表的转换【.tolist()】

应用方式:新数组名=原数组名.tolist()

1.24 ndarray数组的操作:数组的索引和切片

1.相关概念

索引:获取数组中特定位置元素的过程

【python列表提供两种索引方式:从左往右,由0递增;从右向左,由-1递减】

切片:获取数组元素子集的过程

2.案例

(1)一维数组

In: a= np.array([9,8,7,6,5])

#索引
In: a[2]
Out: 7

#切片
In: a[1:4:2]    #3元素冒号分隔——[起始编号:终止编号(不含):步长]
Out: array([8,6])

(2)多维数组

In: a= np.arrange(24).reshape((2,3,4))
Out: 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]]])

#索引
 每个维度一个索引值,用逗号分隔
In: a[1,2,3]  #从左起,由索引0开始,第1个元素中的第2个元素的第3个维度
Out: 23

#索引
In: a[-1,-2,-3]  #从右起,由索引-1开始,最后一个元素的倒数第二个元素的倒数第三个维度
Out: 17

#切片
In: a[:,1,-3]     #选取一个维度用:/全部选择第一个维度
Out: array([5,17])

In: a[:,1:3,:]     #在每个维度的切片方法与一维数组相同
Out:array([[[4,5,6,7],
            [8,9.10,11]],

           [[16,17,18,19],
            [20,21,22,23]]])

In: a[:,:,::2]     #每个维度可以使用步长跳跃切片
Out:array([[[0,2],
            [4,6],
            [8,10]],

           [[12,14],
            [16,18],
            [20,22]]])

1.25ndarray数组运算

1.数组与标量的运算

数组与标量之间的运算作用于数组的每一个元素

eg:b=a/a.mean()

在乘法运算中,列表只是把所有元素复制一遍,而数组则是对每个元素都做了乘法

a = [1,2,3,4]
b = np.array[1,2,3,4]

In: c = a*2
In: print(c)
Out: [1,2,3,4, 1,2,3,4]]
#列表打印时用逗号隔开

In:d = b*2
In:print(d)
Out:[2 4 6 8]
#数组打印时用空格隔开

2.numpy的一元函数

对ndarray中的数据执行元素级的运算

函数 说明

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. floor(x)

计算数组各元素的ceiling值或floor值

ceiling 取不超过元素的整数值

floor 取小于元素的最大整数值

np. rint(x) 计算数组各元素的四舍五入值
np. modf(x) 将数组各元素的小数和整数部分以两个独立数组形式返回

np.cos(x)

np. cosh(x)
np.sin(x)

np. sinh(x)

/np. tan(x)

np. tanh(x)

计算数组各元素的普通型和双曲型三角函数
np. exp(x) 计算数组各元素的指数值
np. sign(x) 计算数组各元素的符号值, 1(+), 0,-1(-)

3.numpy的二元函数

函数 说明
+、-、*、**、/ 两个数组各元素进行对应运算

np. maximum(x,y)

np. fmax()

np. minimum(x,y)

np. fmin( )

元素级的最大值/最小值计算
np . mod(x,y) 元素级的模运算
np. copysign(x,y) 将数组y中各元素值的符号赋值给数组x对应元素
> 、< 、>= 、<=、==、!= 算术比较,产生布尔型数组

 

你可能感兴趣的:(python数据分析与展示,python,numpy)