NumPy学习笔记(二)一维数组、NumPy的数据类型、常见的一维数组生成函数
00 分钟
2024-8-13
2024-10-28
type
status
date
slug
summary
tags
category
icon
password
😀
本章笔记记录了
 

📝 一维数组

一维数组的创建十分简单。首先引入NumPy库
之后就可以通过numpy中的array()创建一维数组,array()可以把元组或者列表转换成numpy数组

📝 数据类型

数据类型类别

像C语言一样,numpy提供了许多的数字类型,有以下的几种:
名称
描述
bool_
布尔型数据类型(True 或者 False)
int_
默认的整数类型(类似于 C 语言中的 long,int32 或 int64)
intc
与 C 的 int 类型一样,一般是 int32 或 int 64
intp
用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64)
int8
字节(-128 to 127)
int16
整数(-32768 to 32767)
int32
整数(-2147483648 to 2147483647)
int64
整数(-9223372036854775808 to 9223372036854775807)
uint8
无符号整数(0 to 255)
uint16
无符号整数(0 to 65535)
uint32
无符号整数(0 to 4294967295)
uint64
无符号整数(0 to 18446744073709551615)
float_
float64 类型的简写
float16
半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位
float32
单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位
float64
双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位
complex_
complex128 类型的简写,即 128 位复数
complex64
复数,表示双 32 位浮点数(实数部分和虚数部分)
complex128
复数,表示双 64 位浮点数(实数部分和虚数部分)
numpy 的数值类型实际上是 dtype 对象的实例,并对应唯一的字符,包括 np.bool_,np.int32,np.float32,等等。

指定数据类型

我们可以通过dtype来指定数据类型:

类型代码

类型代码是用来表示 NumPy 数组中每个元素的数据类型的简写符号。这些符号用于快速标识和指定数组的元素类型,尤其是在创建数组或查看数组的 dtype 时非常有用。下面是详细列出常见 NumPy 数据类型及其对应的类型代码:
  1. 整数类型 b: 布尔类型(bool_),值为 True 或 False。存储时,占用 1 个字节。 i: 有符号整数类型,具体大小由后面的数字指定。例如: i1: 8 位(1 字节)有符号整数,范围为 -128 到 127。 i2: 16 位(2 字节)有符号整数,范围为 -32768 到 32767。 i4: 32 位(4 字节)有符号整数,范围为 -2147483648 到 2147483647(等同于 int32)。 i8: 64 位(8 字节)有符号整数,范围为 -9223372036854775808 到 9223372036854775807(等同于 int64)。 u: 无符号整数类型,表示没有负值的整数。具体大小由后面的数字指定。例如: u1: 8 位(1 字节)无符号整数,范围为 0 到 255(等同于 uint8)。 u2: 16 位(2 字节)无符号整数,范围为 0 到 65535(等同于 uint16)。 u4: 32 位(4 字节)无符号整数,范围为 0 到 4294967295(等同于 uint32)。 u8: 64 位(8 字节)无符号整数,范围为 0 到 18446744073709551615(等同于 uint64)。
  1. 浮点数类型 f: 浮点数类型,表示小数。具体大小由后面的数字指定。例如: f2: 16 位(2 字节)半精度浮点数,包含 1 个符号位,5 个指数位,10 个尾数位。数值范围大约为 ±65504。 f4: 32 位(4 字节)单精度浮点数,包含 1 个符号位,8 个指数位,23 个尾数位。数值范围大约为 ±3.4028235e+38(等同于 float32)。 f8: 64 位(8 字节)双精度浮点数,包含 1 个符号位,11 个指数位,52 个尾数位。数值范围大约为 ±1.7976931348623157e+308(等同于 float64)。
  1. 复数类型 c: 复数类型,表示包含实部和虚部的复数。大小由后面的数字指定。例如: c8: 64 位(8 字节)复数,每部分占 4 字节,表示为两个 32 位浮点数(等同于 complex64)。 c16: 128 位(16 字节)复数,每部分占 8 字节,表示为两个 64 位浮点数(等同于 complex128)。
  1. 字符串类型 S: 字符串类型,用于表示字节字符串。后面跟随的数字表示字符串的最大长度。例如: S10: 表示最多 10 个字符的字节字符串。 U: Unicode 字符串类型。后面跟随的数字表示字符串的最大长度。例如: U10: 表示最多 10 个字符的 Unicode 字符串。
  1. 其他类型 V: 原始数据类型(Void),通常用于表示未解释的原始数据或用于自定义数据结构。后面跟随的数字表示字节大小。例如: V4: 表示 4 个字节的未解释数据。

字节序 (可略过)

字节序决定了多字节数据在内存中的排列方式。在讨论字节序时,我们通常要考虑 CPU 的架构、数据存储方式以及跨平台的数据兼容性。字节序的差异可能会导致数据解释的巨大差异,尤其在二进制数据处理、文件存储和网络通信中。
大端序(Big-endian)与小端序(Little-endian)

大端序(Big-endian):

特点: 高位字节存储在内存的低地址端,低位字节存储在内存的高地址端。大端序的排列顺序与我们书写数字的方式相似。例如,整数 0x12345678 在大端序内存中按顺序存储为 12 34 56 78。 应用: 大端序通常用于网络字节序(Network Byte Order),在网络通信协议中广泛使用,以确保不同系统间的数据一致性。

小端序(Little-endian):

特点: 低位字节存储在内存的低地址端,高位字节存储在内存的高地址端。小端序的排列顺序与大端序相反。例如,整数 0x12345678 在小端序内存中按顺序存储为 78 56 34 12。 应用: 小端序在现代 x86 和 x86_64 架构的计算机中广泛使用,因为这种排列方式在某些算法中更高效,尤其是在处理字节数组和执行位操作时。

字节序的符号表示

NumPy 为了支持多种平台和架构,提供了字节序的显式控制。每个数据类型都可以通过前缀符号来指定字节序:
<: 小端序。例如,<i4 表示小端序的 32 位有符号整数。
>: 大端序。例如,>f8 表示大端序的 64 位浮点数。 =: 系统本地字节序。=i4 表示使用当前系统的字节序。如果系统是小端序的,那么 =i4 等同于 <i4。 |: 无字节序。例如,|S10 表示 10 字节的字符串,因为字符串的字节顺序是固定的,不依赖于字节序。

字节序的转换与数据互操作性

在跨平台开发或数据交换时,字节序的差异可能会导致数据解析错误。因此,在处理二进制文件、网络数据或跨平台应用时,需要明确字节序并进行必要的转换。例如:

类型转换:

使用数组对象的astype(dtype)方法可以转换数组元素的数据类型

📝 arange(), linspace(), logspace()函数的用法

在 NumPy 中,arange()、linspace() 和 logspace() 是生成数值序列的三个重要函数。它们各自适用于不同的场景和用途,下面是对这三个函数的详细讲解,包括其用法、参数、以及在实际应用中的区别和适用场景。
  1. arange() 1.1 用法 arange() 函数用于生成一个数值范围内的等差序列,类似于 Python 内置的 range() 函数,但更为灵活,特别是在处理浮点数时。
    1. 1.2 参数
      start: 序列的起始值(包含)。默认值为 0。 stop: 序列的结束值(不包含)。 step: 序列中元素的间隔(步长)。默认值为 1。如果 step 是小数,则可以生成非整数的序列。 dtype: 生成序列的类型。如果未指定,则由输入推断。
      1.3 示例
      1.4 注意事项 arange() 生成的序列不包含 stop 值。 当 step 为浮点数时,结果可能会有浮点精度问题。
  1. linspace() 2.1 用法 linspace() 函数用于生成一个数值范围内的等间隔的数列,常用于需要生成指定数量的数值点时。与 arange() 的区别在于 linspace() 会根据指定的点数生成序列,而非指定步长。
    1. 2.2 参数
      start: 序列的起始值。 stop: 序列的结束值。 num: 要生成的等间隔样本数量,默认值为 50。 endpoint: 如果为 True,stop 将包含在序列内(默认值为 True)。 retstep: 如果为 True,则返回生成的间隔值(步长),同时返回数组和步长。 dtype: 输出数组的数据类型。如果未指定,则由输入推断。
      2.3 示例
      2.4 注意事项 linspace() 默认情况下包括 stop 值,这与 arange() 不同。 如果需要指定步长,通常会使用 retstep 参数。
  1. logspace() 3.1 用法 logspace() 函数用于生成对数刻度的数列,通常用于需要生成指数分布的数列时,例如在绘制对数坐标图时。
    1. 3.2 参数
      start: 序列中第一个值的指数,basestart 为序列的第一个值。 stop: 序列中最后一个值的指数,basestop 为序列的最后一个值。 num: 要生成的等间隔样本数量,默认值为 50。 endpoint: 如果为 True,base**stop 将包含在序列内(默认值为 True)。 base: 对数空间的底数,默认值为 10。 dtype: 输出数组的数据类型。如果未指定,则由输入推断。
      3.3 示例
      3.4 注意事项 logspace() 在对数刻度上生成等间隔点,这在科学计算和数据可视化中非常有用。 base 参数允许你改变对数的底数,默认是 10,常用的还有 2。
 
上一篇
GCC与make简述
下一篇
NumPy学习笔记(一)前置知识、NumPy简介和环境配置