数据分析--NumPy基础入门-1

文章目录

      • 数据类型
        • 列表和数组
      • NumPy
      • NumPy的引用
      • N维数组对象:ndarray
        • ndarray 属性
      • ndarray数组的创建方法
        • 从Python中的列表,元组等类型创建ndarray数组
        • 使用NumPy中函数创建ndarray数组
          • 用NumPy函数:arange,ones,zeros,full,eys创建ndarray数组
          • 使用NumPy中其他函数创建ndarray数组
      • ndarray数组的变换
      • ndarray数组向列表的转换
      • ndarray的操作-索引和切片
        • 一维数组的索引和切片
        • 多维数组的索引和切片
      • ndarray数组的运算
        • NumPy一元函数
          • NumPy一元函数实例
        • NumPy 二元函数
        • 数组与标量之间的运算
      • 总结

数据类型

  • 一维数据由对等关系的有序或无序数据构成,采用线性方式组织

    • 一维数据:列表和集合类型
  • 二维数据
    二维数据由多个一维数据构成,是一维数据的组合形式
    表格是典型的二维数据

  • 多维数据
    多维数据由一维和二维数据在新维度上扩展行程

  • 高维数据
    高维数据仅利用最基本的二元关系展示数据间的复杂结构

    • 如键值对,字典类型或数据表示格式

列表和数组

  • Python是没有属组的
  • 一组数据的有序结构
  • 区别
    • 列表:数据类型可以不同
    • 数组:数据类型相同

NumPy

NumPy:是一个python科学计算基础库

  • 一个强大的N维数组对象 ndarray
  • 广播功能函数
  • 整合C/C++/Fortran代码的工具
  • 线性代数,傅里叶变换,随机数生成等功能
  • 是SciPy Pandsa等数据处理或科学计算库的基础

NumPy的引用

  • import numpy as np
  • as表示引用模块的别名,可以去掉
  • 建议使用上述约定的别名,尽管别名可以省略或更改

N维数组对象:ndarray

  • 数组对象可以去掉元素间运算所需的循环,使一维向量更像单个数组
  • 设置专门的数组对象,经过优化,可以提升这类应用的运算速度
  • 数组对象采用相同的数据类型,有助于节省运算和存储空间
  • 观察:科学计算中,一个维度所有数据的类型往往相同
# 计算A^2 + b^3, 其中 A和B是一堆数组
def pySum():
    a = [1,2,3,4,5]
    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())

Numpy的方法

import numpy as np
def npSum():
    a = np.array([1,2,3,4,5])
    b = np.array([9,8,7,6,5])
    c = a**2 + b**3
    return c
print(npSum())

ndarray 属性

ndarray是一个多维数组对象,由两部分构成:

  • 实际的数据
  • 描述这些数据的元数据(数据维度,数据类型等)
    ndarray数组一般要求所有元素类型相同,数组下标从0开始
  • ndarray在程序中的别名是:array
  • np.array()输出成[]形式,元素由空格分隔
  • ndarray的两个概念
    • 轴(axis):保存数组的维度
    • 秩(rank):轴的数量
  • ndarray对象的属性
属性 说明
.ndim 秩,即轴的数量或维度的数量
.shape ndarray对象的尺度,对于矩阵,n行m列
.size ndarray对象元素的个数,相当于.shape中n*m的值
.dtype ndarray对象的元素类型
.itemsize ndarray对象中每个元素的大小,以字节为单位
  • ndarray的元素类型(1)
数据类型 说明
bool 布尔类型,True或False
intc 与C语言中的int类型一致,一般是int32 或 int64
intp 用于索引的整数,与C语言中ssize_t一致,int32或 int64
int8 字节长度的整数,取值[-128,127]
int16 16位长度的整数,取值[-32768,32767]
int32 32位长度的整数,取值[-2^31, 2^31-1]
int64 64为长度的整数,取值[-263,263-1]
  • ndarray的元素类型(2)
数据类型 说明
uint8 8位无符号的整数,取值[0,255]
uint16 16位无符号的整数,取值[0,65535]
uint32 32位无符号的整数,取值[0,2^32-1]
uint64 64位无符号的整数,取值[0,2^64-1]
float16 16为半精度浮点数:1位符号位,5位指数,10位尾数
float32 32位半精度浮点数:1位符号位,8位指数,23位尾数
float63 64位半精度浮点数:1位符号位,11位指数,52位尾数
complex64 复数类型。实部和虚部都是32位浮点数
complex129 复数类型,实部和虚部都是64位浮点数
  • 与python语法支持的数据类型的对比
    • python语法仅支持:整数,浮点数,复数3种类型,没有具体的区分
    • ndarray的好处:
      • 科学计算涉及数据较多,对存储和性能都有较高要求
      • 对元素类型精细定义,有助于MumPy合适使用存储空间并优化性能
      • 对元素类型精细定义,有助于对程序规模合理评估
  • ndarray数据可以由非同质对象构成
    • 非同质ndarray元素为对象类型
    • 非同质ndarray对象无法有效发挥NumPy优势,尽量避免使用

ndarray数组的创建方法

  • 从Python中的列表,元组等类型创建ndarray数组
  • 使用NumPy中函数创建ndarray数组,如:arange,ones,zeros等
  • 从字节流(raw bytes)中创建ndarray数组
  • 从文件中读取特定格式,创建ndarray数组

从Python中的列表,元组等类型创建ndarray数组

创建语法:

import numpy as np
x = np.array(list/type) # list表示python的列表,type表示python的元组
x = np.arrayprint(list/type,dtype=np.float32)

## 当np.array()不指定dtype时,NumPy将根据数据情况关联一个dtype类型

例子

import numpy as np
# 从列表类型创建
x = np.array([0,1,2,3,4])
print(x)
print(x.dtype())
# 从元组类型创建
x = np.array((1,2,3,4))
print(x)
# 从列表和元组混合类型创建
x = np.array(([1,2],[2,3],[4,5]))
print(x)

使用NumPy中函数创建ndarray数组

  • 使用numpy的函数创建的ndarray数组基本上都是浮点数类型,除arange外
用NumPy函数:arange,ones,zeros,full,eys创建ndarray数组
函数 说明
np.arange(n) 类似range()函数,返回ndarray类型,元素从0到n-1
np.ones(shape) 根据shape生成一个全1数组,shape是元组类型
np.zeros(shape) 根据shape生成一个全0数组,shape是元组类型
np.full(shape,val) 根据shape生成一个数组,每个元素值都是val
np.eye(n) 创建一个正方的n*n单位矩阵,对角线为1,其余为0
np.ones_like(a) 根据数组a的形状生成一个全1数组
np.zeros_like(a) 根据数组a的形状生成一个全0数组
np.full_like(a,val) 根据数组a的形状生成一个数组,每个元素值都是val

例子

import numpy as np
x = np.arange(10)
print(x)

x = np.ones((3,6))
print(x)

x = np.zeros((3,6), dtype=np.int32)
print(x)

x = np.eye(5)
print(x)

x = np.ones((2,3,4))
print(x)
print(x.shape)      
# 2,3,4; 在最外层的元素中有2个元素,每个元素有3个维度,每个维度下又有4个元素
# 可以大致理解为,3个维度就是3行,4个元素就是4列,最外层2个元素就是2个表,总体算下来就是由2*3*4=24个元素

使用NumPy中其他函数创建ndarray数组
属性 说明
np.linspace() 根据起止数据等间距地填充数据,形成数组
np.concatenate() 将两个或多个数组合并成一个新的数组
import numpy as np
a = np.linspace(1,10,4) 
print(a)
# 第一个参数:起始元素的值
# 第二个参数:终止元素的值
# 第三个参数:需要生成的元素个数
# 不限定数据类型,生成的是浮点数类型

b = np.linspace(1,10,4,endpoint=False)
print(b)
# endponit:表示的是最后一个元素10  4 是否是生成的4个元素中的1个
# False:表示不是4个元素中的1和

c = np.concatenate((a,b))
print(c)

ndarray数组的变换

  • 对于创建后的ndarray数组,可以对其进行维度变换和元素类型变换
  • ndarray数组的维度变换
方法 说明
.reshape(shape) 不改变数组元素,返回一个shape形状的数组,原数组不变
.resize(shape) 与.reshape()功能一致,但修改原数组
.swapaxes(ax1,ax2) 将数组n个维度中的两个维度进行调换
.flatten() 对数组进行降维,返回折叠后的一维数组,原数组不变
import numpy as np
a = np.ones((2,3,4),dtype=np.int32)
b = a.reshape((3,8))
print(b)
print(a)        # 数组a没变

print('#' * 20)

c = a.resize((3,8))
print(c)
# print(a)        # 此时的数组a已经改变

d = a.flatten()
print(d)        # 此时b为一维数组
print(a)        # a数组没变
  • ndarray数组的类型变换
    • .astype(new_type)
    • astype()方法一定会创建新的数组(原始数据的一个拷贝),即使两个类型一致也会进行拷贝
    • astype可以对原数组进行拷贝
import numpy as np
a = np.ones((2.3,4),dtype=np.int)
print(a)
print(a.dtype)

b = a.astype(np.float)
print(b)
print(b.dtype)

ndarray数组向列表的转换

  • 使用tolist函数进行
import numpy as np
a = np.full((2,3,4,),25,dtype=np.int32)
print(a)
print(type(a))

b = a.tolist()
print(b)
print(type(b))

ndarray的操作-索引和切片

  • 索引:获取数组中特定位置元素的过程
  • 切片:获取数组元素子集的过程

一维数组的索引和切片

与Python的列表类似

import numpy as np
a = np.array([9,8,7,6,5])

# 索引
print(a[2])

# 切片;起始编号:终止编号(不含):步长;3个个元素冒号分割
print(a[1:4:2])

多维数组的索引和切片

  • 多维数组中,每一个索引值用,逗号分割
  • 索引
import numpy as np
a = np.arange(24).reshape((2,3,4))
print(a)

# 索引 第一个参数,第二个参数,第三个参数,分别表示为:第一个维度,第二个维度,第三个维度。都是从0开始进行索引
print(a[1,2,3])
print(a[0,1,2])
print([-1,-2,-3])
  • 切片
    • 选取一个维度用:
      • : 表示不关心那个维度,也就是所有维度
    • 每个维度切片方法与一维数组相同
    • 每个维度可以使用步长条约切片
    • 每个维度都是可以通过:来确定的
import numpy as np
a = np.arange(24).reshape((2,3,4))

print(a[:,1,-3])

print(a[:,1:3,:])

print(a[:,:,::2])

ndarray数组的运算

  • 方式一:是按照标量进行计算
    • 标量:一个数据就是标量

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值或flooe值
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(+)
NumPy一元函数实例
  • 当使用一元函数对数组进行计算,数组a本身没有发生改变,只是运算后的结果形成了新的数组
  • 当需要改变原数组,只能重新赋值与原数组
import numpy as np
a = np.arange(24).reshape((2,3,4))
b = np.square()
print(a)    # 此时的a还是原数组
print(b)    # b是数组a经过运算得到的结果

c = np.sqrt(a)
d = np.modf(a)

print(c)
print(d)

NumPy 二元函数

函数 说明
      • / ** | 两个数组和元素进行对应运算
        np.maximum(x,y) np.fmax(x,y) np.minimun(x,y) np.fmin(x,y) | 元素级的最大值/最小值运算
        np.mod(x,y) | 元素级的摸运算
        np.copysign(x,y) | 将数组y中各元素值的符号赋值给数组x对应元素

< >= <= == != | 算术比较,产生布尔型数组

import numpy as np
a = np.arange(24).reshape((2,3,4))
b = np.sprt(a)
print(a)
print(b)

c = np.maximum(a,b)
print(c)

d = a > b
print(d)

数组与标量之间的运算

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

# 例子:计算a与元素平均值的商
import numpy as np
a = np.arange(24).reshape((2,3,4))
print(a)

x = a.mean()        # 获取数组a的平均值,平均值是数组a中所有元素的算术平均值
print(x)

x = a / a.mean()    # 数组与标量值逐一运算,之后形成新的数组x
print(x)

总结

  • 数组的维度:一维,二维,多维,高维
  • NumPy的ndarray是表示n维数组的数组类型
  • ndarray类型的属性 创建 变换
    • 属性
      • .ndim
      • .shape
      • .size
      • .dtype
      • .itemsize
    • 创建
      • np.arange(n)
      • np.ones(shape)
      • np.zeros(shape)
      • np.full(shape,val)
      • np.eye(n)
      • np.ones_like(a)
      • np.zeros_like(a)
      • np.full_like(a,val)
    • 变换
      • .reshape(shape)
      • .resize(shape)
      • .swapaxes(ax1,ax2)
      • .flatten()
  • 数组的索引和切片
  • 数组的运算:一元函数,二元函数

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