NumPy库入门

来源:互联网 发布:淘宝号如何实名认证 编辑:程序博客网 时间:2024/06/01 10:35

数据维度与NumPy库简介

一维数据

  • 定义

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

3.1413, 3.1398, 3.1404, 3.1401, 3.1349, 3.1376

对应列表、数据和集合等概念。

  • 列表和数组

    1. 都是表达一组数据的有序结构的类型;
    2. 列表的数据类型可以不同(例如),数组的数据类型必须相同;
    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对象的属性

    1. .ndim:秩,即轴的数量或维度的数量;
    2. .shape:ndarray对象的尺度,对于矩阵,n行m列,返回(n, m);
    3. .size:ndarray对象元素的个数,相当于.shape中的n和m的值;
    4. .dtype:ndarray对象的元素类型;
    5. .itemsize:ndarray对象中每个元素的大小,以字节为单位。
  • ndarray数组的创建方法

    1. 从Python中的列表、元祖等类型创建ndarray数组;
    2. 使用NumPy中创建ndarray数组的函数,如ones,zeros等;
    3. 从字节流中创建ndarray数组;
    4. 从文件中读取特定格式,创建ndarray数组;
  • 从Python中的列表、元祖等类型创建ndarray数组

    np.array(list/tuple)

    在创建数组时可以使用dtype来指定数组中元素的数据类型:

    np.array(list/tuple, dtype = np.float32)
  • 使用NumPy中创建ndarray数组的函数,如ones,zeros等

    1. np.arange(n):返回ndarray类型的一个范围是[0, n - 1]的递增整数序列;
    2. np.ones((m, n)):生成一个m行n列的全1矩阵;
    3. np.zreos((m, n)):生成一个m行n列的全0矩阵;
    4. np.eyes(n):生成n阶单位阵;
    5. np.full((m, n), val:生成一个m行n列,值全为val的数组);
    6. .shape:返回当前数组的大小,例如:
    x = np.ones((2, 3, 4))x.shape

    输出结果:(2, 3, 4)

    1. np.ones_like(a):根据数组a的形状生成一个全1数组;
    2. np.zeros_like(a):根据数组a的形状生成一个全0数组;
    3. np.full_like(a, val):根据数组a的形状生成一个数组,每个元素都是val;
    4. 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值不作为数组的最后一个元素。

  1. np.concatenate((a, b)):将a,b数组合并,b数组直接接在a数组后面。

    • ndarray数组的维度变换
  2. .reshape(shape):数组元素和总个数不变,返回一个shape形状的数组,原数组不变;

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

    • ndarray数组的类型变换
      .astype(new_type):将原数组中的元素类型修改为new_type,原数组不变。

    • ndarray数组向列表转换

.tolist():将原数组转换为Python中的列表类型。

  • ndarray数组的索引和切片

    1. 一维数组的索引和切片:与Python的列表类似;
a = np.array([9, 8, 7, 6, 5])a[1 : 4 : 2]

输出结果:array([8, 6]);

  1. 多维数组的索引:
a = np.arange(24).reshape((2, 3, 4))a[1, 2, 3]a[0, 1, 2]a[-1, -2, -3]

输出结果:23 6 17

  1. 多维数组的切片
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数组的运算

    1. 数组与表量之间的运算
      实例:计算a与a中所有元素平均值的商:
a = np.arange(24).reshape((2, 3, 4))a = a / a.mean()

输出结果为一个2层3行4列的数组,数组中的每个元素是原来a中的每个元素除以原来a中所有元素平均值的商

  1. 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

这些函数都是新生成数组作为结果,原数组不变。

  1. NumPy二元函数
+ - * / ** #两个数组各元素进行对应运算np.maximum(x, y), np.fmax() #元素级的最大值计算np.minimum(x, y), np,fmin() #元素级的最小值计算np.mod(x, y) #元素级的模运算np,copysign(x, y) #将数组y中各元素值得符号赋值给数组x对应元素> < >= <= == != #算数比较,产生布尔型数组
原创粉丝点击