- NumPy 教程
- 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 - 线性代数
- NumPy - Matplotlib
- NumPy - 使用 Matplotlib 绘制直方图
- NumPy - NumPy 的 I/O 操作
- 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 编译器
- NumPy - 快速指南
- NumPy - 有用资源
- NumPy - 讨论
NumPy - 数组属性
NumPy 数组属性
在 NumPy 中,属性是数组对象的特性,提供关于数组及其数据的重要的信息。这些属性用于访问关于数组结构和配置的各种细节,而不会修改它们。
在本章中,我们将讨论 NumPy 的各种数组属性。
NumPy 形状属性
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 维度属性
ndim属性返回数组的维度(轴)数。
在 NumPy 中,数组的维度称为它的秩。NumPy 数组中的每个轴对应一个维度。轴(维度)的数量称为数组的秩。
数组可以是任何维度,从一维(1D)数组(也称为向量)到多维数组,如二维(2D)数组(矩阵)甚至更高维度的数组。
示例 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”,从而得到一个 3D 数组:
# This is one dimensional array import numpy as np a = np.arange(24) a.ndim # Now reshape it b = a.reshape(2,4,3) print (b) # b is having three dimensions
执行上述代码后,我们得到以下输出:
[[[ 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”属性来检索 3D 数组的大小:
import numpy as np
# Creating a 3D array
array_3d = np.array([[[1, 2, 3], [4, 5, 6]],
[[7, 8, 9], [10, 11, 12]]])
print("3D Array:\n", array_3d)
print("Size of the array:", array_3d.size)
获得的输出如下:
3D Array: [[[ 1 2 3] [ 4 5 6]] [[ 7 8 9] [10 11 12]]] Size of the array: 12
NumPy 数据类型属性
dtype属性描述数组中元素的数据类型。在 NumPy 中,数组的数据类型是指存储在数组中的元素的类型。
NumPy 支持各种数据类型,包括整数、浮点数、复数、布尔值等等。每种数据类型都由一个dtype对象表示。“dtype”不仅指定数据的类型,还指定其大小和字节序。
示例
在这个例子中,我们在创建 NumPy 数组时使用“dtype”属性指定其数据类型:
import numpy as np
# Creating an array of integers
int_array = np.array([1, 2, 3], dtype=np.int32)
print("Integer Array:", int_array)
print("Data type of int_array:", int_array.dtype)
# Creating an array of floats
float_array = np.array([1.1, 2.2, 3.3], dtype=np.float64)
print("Float Array:", float_array)
print("Data type of float_array:", float_array.dtype)
# Creating an array of complex numbers
complex_array = np.array([1 + 2j, 3 + 4j], dtype=np.complex128)
print("Complex Array:", complex_array)
print("Data type of complex_array:", complex_array.dtype)
这将产生以下结果:
Integer Array: [1 2 3] Data type of int_array: int32 Float Array: [1.1 2.2 3.3] Data type of float_array: float64 Complex Array: [1.+2.j 3.+4.j] Data type of complex_array: complex128
NumPy 元素大小属性
itemsize属性返回数组中每个元素的长度(以字节为单位)。
元素大小由数组的数据类型 (dtype) 决定。不同的数据类型需要不同的内存量。例如,int32类型每个元素需要“4”个字节,而float64类型每个元素需要“8”个字节。
示例 1
在下面的示例中,我们检查整数数据类型“int8”数组的元素大小:
# dtype of array is int8 (1 byte) import numpy as np x = np.array([1,2,3,4,5], dtype = np.int8) print (x.itemsize)
我们得到如下所示的输出:
1
示例 2
现在,我们检查浮点数据类型“float32”数组的元素大小:
# dtype of array is now float32 (4 bytes) 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
# Creating an array
array = np.array([1, 2, 3, 4, 5], dtype=np.int32)
# Checking total memory size of the array
print("Total memory size of the array:", array.nbytes, "bytes")
获得的输出如下所示:
Total memory size of the array: 20 bytes
NumPy 步长属性
strides属性提供遍历数组时每个维度需要步进的字节数。
步长指定在内存中必须跳过的字节数,以便沿每个轴从一个元素移动到下一个元素。它们有助于确定数组如何在内存中布局以及如何访问元素。
示例
在下面的示例中,我们使用“strides”属性访问二维数组中的元素来计算内存地址:
import numpy as np
# Creating a 2D array
array = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
# Checking the strides
print("Array shape:", array.shape)
print("Array strides:", array.strides)
第一个轴(行)的步长为 16 个字节,这意味着要从一行移动到下一行,NumPy 在内存中跳过 16 个字节。第二个轴(列)的步长为 4 个字节,表示要在同一行内从一列移动到下一列,NumPy 跳过 4 个字节:
Array shape: (3, 4) Array strides: (32, 8)
NumPy 标志属性
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属性返回基础对象。如果数组拥有其数据,则 base 为“None”。在 NumPy 中,“数组基础”的概念是指从中派生新数组的原始数组。
示例
在这个例子中,“view_array”是“original_array”的视图,而“view_array”的 base 属性指向“original_array”:
import numpy as np
# Creating an array
original_array = np.array([[1, 2, 3], [4, 5, 6]])
# Creating a view (a slice) of the original array
view_array = original_array[0:1, :]
# Checking the base of the view
print("Base array of view_array:", view_array.base)
产生的结果如下:
Base array of view_array: [[1 2 3] [4 5 6]]
NumPy 实部和虚部属性
对于包含复数的数组,real和imag属性分别返回实部和虚部。
示例
在这个例子中,我们使用“real”属性返回一个包含实部的数组,并使用“imag”属性返回一个包含虚部的数组:
import numpy as np
# Creating an array of complex numbers
complex_array = np.array([1+2j, 3+4j, 5+6j])
# Accessing the real part
real_part = complex_array.real
print("Real part:", real_part)
# Accessing the imaginary part
imaginary_part = complex_array.imag
print("Imaginary part:", imaginary_part)
我们得到如下所示的输出:
Real part: [1. 3. 5.] Imaginary part: [2. 4. 6.]