Numpy 基本概念

笔记 · 2023-05-23 · 534 人浏览
Numpy 基本概念

  Numpy 是 Numerical Python 的简称,是高性能计算和数据分析的基础包,是 Python 的一个重要补充库。Numpy 支持高维度数组与矩阵计算,也针对数组运算提供了大量的数学函数库。Numpy 运算效率极好,是大量机器学习框架的基础库。


ndarray 对象

Numpy 中主要包含一个强大的 N 维数组对象 ndarray、整合了 C/C++ 和 FORTRAN 代码的工具包,以及丰富的数学函数库,尤其是实用的线性代数、傅里叶变换和随机数生成的函数。

ndarray 对象是一系列同类型数据的集合下标索引从 0 开始,是一个用于存放同类型元素的多维数组。ndarray 中的每个元素在内存中都具有相同大小的存储区域。

1. ndarray 的内部结构

相对于标准的数组,ndarray 本质上是一个数据结构。

ndarray 内部主要由以下内容构成:
ndarray 内部结构

  • shape:数组形状,表示数组各维大小的整数元组。
  • dtype:数据类型,描述数组的类型对象。对象类型为内置的 24 种数组标量类型的一种。
  • data:数组数据,指向内存中数据的指针。
  • strides:跨度,一个元组,表示当前维度移动到下一个位置需要跨越的字节数。跨度可以是负数,这样会使数组在内存中向后移动。
  • order:访问数组元素的主顺序,如 “C” 为行主序,“F” 为列主序。

2. 创建 ndarray

在 Numpy 库中,提供了 ndarray() 和 array() 两个函数,都可以用来建立一个 ndarray。其中 ndarray() 函数属于底层的方法,一般情况下,建立数组使用的是更为便捷的 array() 函数。

一般格式如下:
  numpy.array(object, dtype = None, copy = True, order = None, subok = Falae, ndmin = 0)

主要参数:

  • object:数组或嵌套的数列。
  • dtype:数组元素的数据类型,可选。
  • order:创建数组的样式,C 为行方向,F 为列方向,A 为任意方向(默认)。
  • ndmin:指定一个一维 ndarray 数组。

示例

import numpy as np 

a1 = np.array([1, 2, 3])   # 建立一个一维 adarray 数组
a2 = np.array([[1, 2], [3, 4]])   # 创建一个二维数组
a_ndmin = np.array([1, 2, 3, 4, 5], ndmin = 2)   # 设置数组最小维度
a_dtype = np.array([1, 2, 3], dtype = np.complex)   # 设置数组类型为复数 

思考

C 数组的概念:数据类型一致的一个连续的内存空间
Python list 列表:(C 语言说:列表其实是一个指针数组)列表不要求数据类型一致
Numpy 的数组:同样是一个有序的,相同数据类型的集合

Numpy 设计初衷是用于运算的,所以对数据类型进行统一优化。但需要注意:

  1. numpy 默认 ndarray 的所有元素的类型是相同的
  2. 如果传进来的列表中包含不同的数据类型,则统一为同一类,优先级:str > float > int

Numpy 数据类型

Numpy 内置了 24 种数组标量(Array Scaler)类型,也支持 Python 的基本数据类型,某种程度上可以和 C 语言的数据类型相对应,以下是基本的数据类型:

名称 描述
bool_ 布尔型,True 或 False
int8 有符号字节类型,范围为 -128 ~ 127
int16 有符号 16 位整数,范围为 -32768 ~ 32767
int32 有符号 32 位整数,范围为 -231 ~ 231-1
int64 有符号 64 位整数,范围为 -263 ~ 263-1
uint8 有符号字节类型,范围为 0 ~ 255
uint16 无符号 16 位整数,范围为 0 ~ 65535
uint32 无符号 32 位整数,范围为 0 ~ 232-1
uint64 无符号 64 位整数,范围为 0 ~ 264-1
float_ 64 位浮点数,同 float64
float16 16 位浮点数
float32 32 位浮点数
float64 64 位(双精度)浮点数,同 float_
complex_ 128 位复数,同 complex128
complex64 64 位复数 *
complex128 128 位复数,同 complex_

 * 复数:形如 z = a + bi(a,b均为实数)的数称为复数,其中 a 称为实部,b 称为虚部,i 称为虚数单位(i 表示 -1 的平方根)。
 当虚部 b = 0 时,复数 z 是实数;
 当虚部 b != 0 且 实部 a = 0 时,复数 z 是纯虚数。

对于每种数据类型,Numpy 还提供了同名的类型函数,例如 float16()int32() 等,可以用来创建该类型的数据对象,也可以用来转换数据对象的数据类型。

1.数据类型对象(dtype)

Numpy 中的 dtype(data type object)是由 numpy.dtype 类产生的数据类型对象。其作用是描述数组元素对应的内存区域的各部分的使用。其内部结构包括数据类型、数据的字节数、各组成部分的顺序,各字段的名称等

构造 dtype 对象的语法: numpy.dtype(object, align, copy)

主要参数如下:

  • object:要转换为 dtype 对象的数据对象。
  • align:如果为 True,则填充字段使其类似 C 的结构体。
  • copy:指明是否复制 dtype 对象。如果为 False,则是对内置数据类型对象的引用。

2. 使用 astype() 修改数据类型

在数组建立之后,也可以使用 Numpy 中的数组附带的 astype() 方法修改其数据类型,格式如下:
  array.astype(dtype, order='K', casting='unsafe', subok=True, copy=True)

另外,使用此方法还可以把 Python 的数据类型映射给 dtype 类型。

Python 对象 dtype 对象
int numpy.int_
bool numpy.bool_
float numpy.float_
complex numpy.complex_

扩展:Pandas 是基于 Numpy 数组的,所以 astype() 也能对 DataFrame 的字段进行类型转换。


  NumPy 的核心数据结构是 ndarray,也是其最重要的概念之一。ndarray 是在内存中连续存储并由相同类型元素组成的多维数组对象,支持各种数学运算和通用函数(ufunc)运算。ndarray 既可以表示向量、矩阵等基本数据结构,也可以承载复杂数据,如图像、音频、文本及其他形式的数据集。Numpy 常用方法包括:创建数组、数组属性、数组索引和切片、数组的变形和转置、通用函数和数学运算、形状相关操作、数组统计和聚合操作、矩阵操作、随机数生成。

Python
  1. w 2023-05-23

    1. Justin_Wu (作者)  2023-05-23
      @w

      马上要期末了,抓紧复习机会😭

Theme Jasmine by Kent Liao

本网站由 又拍云 提供CDN加速/云存储服务

鄂ICP备2023005457号    鄂公网安备 42011302000815号

欢迎来自 * · * 的用户