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 实部和虚部属性
对于包含复数的数组,real 和 imag 属性分别返回实部和虚部。
示例
在此示例中,我们使用 "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
这将返回包含内存中数组实际元素的缓冲区。 |