fantasy

风色幻想

我与春风皆过客,你携秋水揽星河

fantasy

1995 字

前言

背景

Python中用列表(list)保存一组值,可用来当作数组使用,由于列表的元素可以是任何对象,因此列表中所保存的是对象的指针。为保存一个简单的[1,2,3],需要有3个指针和三个整数对象,对于数值运算来说这种结构显然比较浪费内存和CPU计算时间。此外Python还提供了一个array模块,array对象和列表不同,它直接保存数值,和C语言的一维数组比较类似,但是由于它不支持多维,也没有各种运算函数,因此也不适合做数值运算。numpy的诞生弥补了这些不足, numpy提供ndarray( N-dimensional array object)对象: ndarray是存储单一数据类型的多维数组。

介绍

numpy(Numerical Python的简称)是高性能科学计算和数据分析的基础包,支持维度数组与矩阵运算,广泛应用于处理机器学习数据、图像处理和计算机图形学、数学计算等场景。其内容主要包括:

  • N维数组对象ndarray,具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。
  • 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。
  • 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。
  • 线性代数、随机数生成以及傅里叶变换等功能。
  • 用于集成由C、C++、 Fortran等语言编写的代码的工具。

数组操作

Ndarray概述

  • N维数组对象ndarray是用于存放同类型元素的多维数组。
  • ndarray中的每个元素在内存中都有相同存储大小的区域。
  • ndarray中的每个元素是数据类型对象的对象(称为 dtype)
  • 与 Python中的其他容器对象一样,可以通过对数组进行索引或切片。
  • 可通过ndarray的方法和属性来访问和修改ndarray的内容。

数组创建

  1. 常用函数
方法 解释 重要参数
numpy.array(object, dtype None, copy= True, order None, subok=False, ndmin =0) 将序列型的对象转成一个含有传入数据的numpy数组,嵌套序列将会被转换为一个多维数组 object=数组或嵌套的数列、order=创建数组的样式,C为行优先,F为列优先,A为任意方向(默认)、ndmin=指定生成数组的最小维度
numpy.zeros(shape, dtype=float, order='C') 生成特定的零数组 shape=维度列表
numpy.ones(shape, dtype=None, order='C') 生成特定的全1数组 同上
numpy.identity(n, dtype=None) 生成单位数组 n=单位数组维度
numpy.random.rand(d0, d1, ..., dn) 创建给定形状的数组,值在[0,1)上分布 dn=维度列表
numpy.random.uniform(low=0.0, high=1.0, size=None) 生成一个值在[low, high)范围的给定形状的数组 size=维度列表
numpy.random.randint(low, high=None, size=None, dtype=int) 生成一个值在[low, high)范围的给定形状的整数数组 同上
numpy.random.normal(loc=0.0, scale=1.0, size=None) 给定均值、标准差、维度的正态分布 loc=均值, scale=标准差, size=维度列表
  1. 常用属性
属性 解释
ndarray.size 数组元素个数
ndarray.shape 数组形状
ndarray.ndim 数组维度
ndarray.dtype 数组元素类型
ndarray.Itemsize 数组元素字节大小

数组运算

运算符 示例 说明
+ arr1+arr2 基础加法
- arr1-arr2 基础减法
* arr1*arr2 基础乘法(按元素)
/ 1/array 基础除法
** arr1**arr2 数组乘法([n×m]**[m×n]=[n×n])

数组统计

方法 解释
numpy.sum() 对数组中全部或某维度的元素求和
numpy.mean() 算术平均数(零长数组为NaN)
numpy.std()、numpy.var() 标准差和方差(可调自由度)
numpy.max()、numpy.min() 最大值和最小值
numpy.argmax()、numpy.argmin() 最大值和最小值的索引
numpy.comsum() 所有元素累加
numpy.comprod() 所有元素累积

所有统计操作都有对应的ndarray实现。例:numpy.sum(ndarray) = ndarray.sum()

矩阵操作

Matrix概述

  • NumPy中包含了一个矩阵库numpy.matlib,该模块中的函数返回的是一个矩阵,而不是ndarray对象。
  • 一个mxn的矩阵是一个由m行(row)n列(column)元素排列成的矩形阵列。
  • 矩阵里的元素可以是数字、符号或数学式
  • NumPy和 Matlab不一样,对于多维数组的运算缺省情况下并不使用矩阵运算,可以调用ndarray对象相应的函数进行矩阵运算

    官方 建议弃用matrix,使用ndarray代替。
    It is no longer recommended to use this class, even for linear algebra. Instead use regular arrays. The class may be removed in the future.

矩阵创建

方法 解释
numpy.matrix() 将序列型的对象转成一个矩阵
numpy.matlab.empty() 生成指定维度矩阵并填充随机数据
numpy.matlab.zeros() 生成指定维度的全0矩阵
numpy.matlab.ones() 生成指定维度的全1矩阵
numpy.matlab.eye() 生成对角线为1、其它为0的指定维度矩阵
numpy.matlab.identity() 生成指定维度的单位矩阵
numpy.matlab.rand() 生成指定维度矩阵并填充随机数据 [0,1)

对于矩阵m来说,x[0,0]表示第一行第一列元素,x[0][0]表示第一维数据。

常用操作

方法 解释
numpy.asarray() 矩阵转数组
numpy.asmatrix() 数组转矩阵
matrix.T 矩阵转置
matrix.mean() 计算矩阵特征值
matrix.sum() 计算矩阵指定元素和
matrix.max()、matrix.min() 计算指定维度最大值、最小值
matrix.argmax()、matrix.argmin() 计算指定维度最大值、最小值的索引
matrix.diagonal() 对角线元素

矩阵运算

方法 解释
numpy.dot() 求点积(元素对应相乘)
numpy.vdot() 求内积(元素对应相乘的和)
numpy.trace() 求对角元素的和
numpy.linalg.inv() 求方阵的逆
numpy.linalg.det() 求行列式
numpy.linalg.eig() 求方阵的特征值和特征向量
numpy.linalg.svd() 求奇异值分解(SVD)
numpy.linalg.solve() 求矩阵线性方程的解

numpy.linalg中有一组标准的矩阵分解运算以及诸如求逆和行列式之类的东西

支付宝打赏二维码
微信打赏二维码

最新文章