NumPy 教程

NumPy 首页 NumPy 简介 NumPy 环境

数组

NumPy Ndarray 对象 NumPy 数据类型

创建和操作数组

NumPy 数组创建例程 NumPy 数组操作 NumPy 基于现有数据创建数组 NumPy 基于数值范围创建数组 NumPy 数组迭代 NumPy 重塑数组 NumPy 连接数组 NumPy 堆叠数组 NumPy 拆分数组 NumPy 展平数组 NumPy 转置数组

索引与切片

NumPy 索引 &切片 NumPy 索引 NumPy 切片 NumPy 高级索引 NumPy 高级索引 NumPy 字段访问 NumPy 使用布尔数组切片

数组属性与操作

NumPy 数组属性 NumPy 数组形状 NumPy 数组大小 NumPy 数组步长 NumPy 数组元素大小 NumPy 广播 NumPy 算术运算 NumPy 数组加法 NumPy 数组减法 NumPy 数组乘法 NumPy 数组除法

高级数组运算

NumPy 交换数组的轴 NumPy 字节交换 NumPy 副本和视图 NumPy 逐元素数组比较 NumPy 过滤数组 NumPy 连接数组 NumPy 排序、搜索& 计数函数 NumPy 搜索数组 NumPy 数组并集 NumPy 查找唯一行 NumPy 创建日期时间数组 NumPy 二元运算符 NumPy 字符串函数 NumPy 矩阵库 NumPy 线性代数 NumPy Matplotlib NumPy 使用 Matplotlib 绘制直方图

排序和高级操作

NumPy 数组排序 NumPy 沿轴排序 NumPy 使用花式索引进行排序 NumPy 结构化数组 NumPy 创建结构化数组 NumPy 操作结构化数组 NumPy 记录数组 NumPy 加载数组 NumPy 保存数组 NumPy 将值附加到数组 NumPy 交换列数组 NumPy 将轴插入数组

处理缺失数据

NumPy 处理缺失数据 NumPy 识别缺失值 NumPy 移除缺失数据 NumPy 插补缺失值数据

性能优化

NumPy 使用数组进行性能优化

线性代数

NumPy 线性代数 NumPy 矩阵库 NumPy 矩阵加法 NumPy 矩阵减法 NumPy 矩阵乘法 NumPy 逐元素矩阵运算 NumPy 点积 NumPy 矩阵求逆 NumPy 行列式计算 NumPy 特征值 NumPy 特征向量 NumPy 奇异值分解 NumPy 求解线性方程 NumPy 矩阵范数

元素级矩阵运算

NumPy 总和 NumPy 平均值 NumPy 中位数 NumPy 最小值 NumPy 最大值

集合运算

NumPy 唯一元素 NumPy 交集 NumPy 并集 NumPy 差集

随机数生成

NumPy 随机数生成器 NumPy 排列和重排 NumPy 均匀分布 NumPy 正态分布 NumPy 二项分布 NumPy 泊松分布 NumPy 指数分布 NumPy 瑞利分布 NumPy 逻辑分布 NumPy 帕累托分布 NumPy 使用 Seaborn 可视化分布 NumPy 多项分布 NumPy 卡方分布 NumPy Zipf 分布

文件输入 &输出

NumPy 使用 NumPy 进行 I/O NumPy 从文件读取数据 NumPy 将数据写入文件 NumPy 支持的文件格式

数学函数

NumPy 数学函数 NumPy 三角函数 NumPy 指数函数 NumPy 对数函数 NumPy 双曲函数 NumPy 舍入函数

傅里叶变换

NumPy 离散傅里叶变换 (DFT) NumPy 快速傅里叶变换 (FFT) NumPy 逆傅里叶变换 NumPy 傅里叶级数和变换 NumPy 信号处理应用 NumPy 卷积

多项式

NumPy 多项式表示 NumPy 多项式运算 NumPy 求多项式的根 NumPy 求多项式的根

统计

NumPy 统计函数 NumPy 描述性统计

日期时间函数

NumPy 日期和时间基础知识 NumPy 表示日期和时间 NumPy 日期和时间运算 NumPy 使用日期时间进行索引 NumPy 时区处理 NumPy 时间序列分析 NumPy 处理时间增量 NumPy 闰秒处理 NumPy 矢量化日期时间运算

ufunc

NumPy ufunc 简介 NumPy 创建通用函数 (ufunc) NumPy 算术通用函数 (ufunc) NumPy 小数舍入 ufunc NumPy 对数通用函数(ufunc) NumPy 求和通用函数 (ufunc) NumPy 乘积通用函数 (ufunc) NumPy 差分通用函数 (ufunc) NumPy 寻找最小公倍数 (LCM) NumPy 寻找最大公约数 (GCD) NumPy 三角函数 (ufunc) NumPy 双曲线 (ufunc) NumPy 集合运算(ufunc)

实用资源

NumPy 快速指南 NumPy 备忘单


NumPy - 数组属性

NumPy 数组属性

在 NumPy 中,属性是数组对象的属性,提供有关数组及其数据的重要信息。这些属性用于访问数组结构和配置的各种细节,而无需修改数组。

在本章中,我们将讨论 NumPy 的各种数组属性。

NumPy Shape 属性

NumPy shape 属性提供数组的维度。它返回一个元组,表示数组沿每个维度的大小。它还可以用于调整数组大小。

示例 1

在下面的示例中,我们使用 shape 属性检索 NumPy 数组的形状 -

import numpy as np
a = np.array([[1,2,3],[4,5,6]])
print (a.shape)

以下是获得的输出 -

(2, 3)

示例 2

在这里,我们使用 NumPy 中的 shape 属性调整数组的大小 -

import numpy as np

a = np.array([[1,2,3],[4,5,6]])
a.shape = (3,2)
print (a)

这将产生以下结果 -

[[1, 2]
[3, 4]
[5, 6]]

示例 3

NumPy 还提供了一个 reshape() 函数来调整数组大小 -

import numpy as np
a = np.array([[1,2,3],[4,5,6]])
b = a.reshape(3,2)
print (b)

以下是上述代码的输出−

[[1, 2]
[3, 4]
[5, 6]]

NumPy Dimensions 属性

ndim 属性返回数组的维度(轴)数量。

在 NumPy 中,数组的维度称为其。NumPy 数组中的每个轴对应一个维度。轴的数量(维度)称为数组的秩。

数组可以是任意维度,从一维 (1D) 数组(也称为向量)到多维数组(例如二维数组(矩阵),甚至更高维的数组。

示例 1

在此示例中,我们使用 arange() 函数创建一个 NumPy 数组 a,其中包含从"0"到"23"的 24 个等距整数 -

import numpy as np
a = np.arange(24)
print (a)

获得的输出如下所示 -

[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]

示例 2

在这里,我们使用 arange() 函数创建一个包含"24"个元素的一维 NumPy 数组 a,然后将其重塑为具有指定形状的三维数组"b",从而得到一个三维数组 -

# 这是一个一维数组
import numpy as np
a = np.arange(24)
a.ndim

# 现在重塑它
b = a.reshape(2,4,3)
print (b)
# b 是三维数组

执行上述代码后,我们得到以下输出 -

[[[ 0, 1, 2]
[ 3, 4, 5]
[ 6, 7, 8]
[ 9, 10, 11]]
[[12, 13, 14]
[15, 16, 17]
[18, 19, 20]
[21, 22, 23]]]

NumPy 大小属性

size 属性返回数组中元素的总数。在 NumPy 中,数组的大小指的是数组中包含的元素总数。

  • 对于一维数组,大小就是元素的数量。
  • 对于二维数组,大小是行数和列数的乘积。
  • 对于三维数组,大小是所有三维元素大小的乘积。

示例

在下面的示例中,我们使用 NumPy 中的"size"属性来获取三维数组的大小 -

import numpy as np
# 创建三维数组
array_3d = np.array([[[1, 2, 3], [4, 5, 6]],
[[7, 8, 9], [10, 11, 12]]])
print("3D 数组:
", array_3d)
print("数组大小:", array_3d.size)

以下是得到的输出 -

3D 数组:
[[[ 1 2 3]
[ 4 5 6]]

[[ 7 8 9]
[10 11 12]]]
数组大小:12

NumPy 数据类型属性

dtype 属性描述数组中元素的数据类型。在 NumPy 中,数组的数据类型是指存储在数组中的元素的类型。

NumPy 支持多种数据类型,包括整数、浮点数、复数、布尔值等等。每种数据类型都由一个 dtype 对象表示。 "dtype"不仅指定了数据的类型,还指定了其大小和字节顺序。

示例

在此示例中,我们在创建 NumPy 数组时使用"dtype"属性指定其数据类型 -

import numpy as np

# 创建整数数组
int_array = np.array([1, 2, 3], dtype=np.int32)
print("整数数组:", int_array)
print("int_array 的数据类型:", int_array.dtype)

# 创建浮点数数组
float_array = np.array([1.1, 2.2, 3.3], dtype=np.float64)
print("浮点数组:", float_array)
print("float_array 的数据类型:", float_array.dtype)

# 创建复数数组
complex_array = np.array([1 + 2j, 3 + 4j], dtype=np.complex128)
print("复数数组:", complex_array)
print("complex_array 的数据类型:", complex_array.dtype)

这将产生以下结果 -

整数数组:[1 2 3]
int_array 的数据类型:int32
浮点数组:[1.1 2.2 3.3]
float_array 的数据类型:float64
复数数组:[1.+2.j 3.+4.j]
complex_array 的数据类型:complex128

NumPy Itemsize 属性

itemsize 属性返回数组中每个元素的长度(以字节为单位)。

元素大小由数组的数据类型 (dtype) 决定。不同的数据类型需要不同的内存大小。例如,int32 类型每个元素需要 4 个字节,而 float64 类型每个元素需要 8 个字节。

示例 1

在以下示例中,我们检查整数数据类型为"int8"的数组的项目大小 -

# 数组的 dtype 为 int8(1 字节)
import numpy as np
x = np.array([1,2,3,4,5], dtype = np.int8)
print (x.itemsize)

我们得到如下所示的输出 -

1

示例 2

现在,我们检查浮点数据类型为"float32"的数组的项目大小 -

# 数组的 dtype 现在是 float32(4 字节)
import numpy as np
x = np.array([1,2,3,4,5], dtype = np.float32)
print (x.itemsize)

结果如下 -

4

NumPy 缓冲区信息属性

nbytes 属性返回数组元素消耗的总字节数。

在 NumPy 中,数组的缓冲区信息提供了有关底层内存结构的详细信息用于存储数组数据。这包括内存布局、数据类型以及缓冲区内的字节偏移量等信息。

示例

在本例中,我们使用"nbytes"属性来检索数组数据缓冲区使用的总内存 -

import numpy as np
# 创建数组
array = np.array([1, 2, 3, 4, 5], dtype=np.int32)

# 检查数组的总内存大小
print("数组的总内存大小:", array.nbytes, "bytes")

获得的输出如下所示 -

数组的总内存大小:20 字节

NumPy 步长属性

strides 属性提供遍历数组时在每个维度上步进的字节数。

Strides 指定沿每个轴从一个元素移动到下一个元素时必须在内存中跳过的字节数。它们有助于确定数组在内存中的布局以及如何访问元素。

示例

在下面的示例中,我们使用"strides"属性计算内存地址来访问二维数组中的元素 -

import numpy as np

# 创建二维数组
array = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])

# 检查步幅
print("Array shape:", array.shape)
print("Array strides:", array.strides)

第一个轴(行)的步幅为 16 个字节,这意味着从一行移动到下一行,NumPy 会跳过 16 个字节内存。第二个轴(列)的步长为 4 个字节,表示在同一行内从一列移动到下一列时,NumPy 会跳过 4 个字节 -

数组形状:(3, 4)
数组步长:(32, 8)

NumPy Flags 属性

flags 属性返回有关数组内存布局的信息,例如它在内存中是否连续。

NumPy 提供了多个标志,用于描述数组内存布局和属性的不同方面 -

序号 属性 &说明
1

C_CONTIGUOUS (C)

数据位于单个 C 风格的连续段中

2

F_CONTIGUOUS (F)

数据位于单个 Fortran 风格的连续段中

3

OWNDATA (O)

数组拥有其使用的内存或从其他对象借用内存

4

WRITEABLE (W)

数据区域可写入。设置为 False 会锁定数据,使其变为只读。

5

ALIGNED (A)

数据和所有元素均已针对硬件进行适当对齐。

6

UPDATEIFCOPY (U)

此数组是其他数组的副本。当此数组被释放时,基础数组将使用此数组的内容进行更新。

示例

以下示例显示了数组标志的当前值 -

import numpy as np
x = np.array([1,2,3,4,5])
print (x.flags)

以下是获得的输出 -

C_CONTIGUOUS : True
F_CONTIGUOUS : True
OWNDATA : True
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False

NumPy 基属性

如果数组是另一个数组的视图,则 base 属性返回基对象。如果数组拥有其数据,则基数为"无"。在 NumPy 中,"数组基数"的概念指的是新数组所基于的原始数组。

示例

在此示例中,"view_array"是"original_array"的视图,"view_array"的 base 属性指向"original_array" -

import numpy as np

# 创建数组
original_array = np.array([[1, 2, 3], [4, 5, 6]])

# 创建原始数组的视图(切片)
view_array = original_array[0:1, :]

# 检查视图的基数
print("view_array 的基数数组:", view_array.base)

生成的结果如下−

view_array 的基础数组:[[1 2 3]
[4 5 6]]

NumPy 实部和虚部属性

对于包含复数的数组,realimag 属性分别返回实部和虚部。

示例

在此示例中,我们使用 "real" 属性返回包含实部的数组,使用 "imag" 属性返回包含虚部的数组 −

import numpy as np

# 创建复数数组
complex_array = np.array([1+2j, 3+4j, 5+6j])

# 访问实部
real_part = complex_array.real
print("实部:", real_part)

# 访问虚部
imaginary_part = complex_array.imag
print("虚部:", imaginary_part)

我们得到如下所示的输出 -

实部:[1. 3. 5.]
虚部:[2. 4. 6.]

属性列表

以下是 NumPy 中各种数组属性的列表 -

Sr.No. 操作 &说明
1 ndarray.ndim

此属性返回数组的维数。

2 ndarray.shape

此属性返回数组每个维度的大小。

3 ndarray.size

此属性返回数组中元素的数量。数组。

4 ndarray.dtype

此属性返回数组中元素的数据类型。

5 ndarray.itemsize

此属性返回数组中每个元素的大小。

6 ndarray.nbytes

此属性返回数组元素消耗的总字节数。

7 ndarray.T

返回转置数组的视图。

8 ndarray.real

返回数组的实部。

9 ndarray.imag

返回数组的虚部。

10 ndarray.flat

数组上的一维数组迭代器。

11 ndarray.ctypes

这将返回一个对象,以简化数组与 ctypes 模块的交互。

12 ndarray.data

这将返回包含内存中数组实际元素的缓冲区。