NumPy - 数组元素大小
NumPy 数组元素大小
NumPy 数组中的 itemsize 属性指示数组中每个元素的大小(以字节为单位)。此大小由数组元素的数据类型(例如,整数、浮点数)决定。
通过了解元素大小,您可以估算数组的总内存消耗。这对于理解数组的内存布局和存储需求非常重要,尤其是在处理大型数据集时。
访问数组元素大小
您可以使用 itemsize 属性访问 NumPy 数组的元素大小。此属性返回一个整数,表示数组中每个元素的大小(以字节为单位)。
示例
在以下示例中,我们将访问一个整数数组和一个浮点数组的项大小 -
import numpy as np # 创建具有不同数据类型的数组 array_int32 = np.array([1, 2, 3], dtype=np.int32) array_float64 = np.array([1.0, 2.0, 3.0], dtype=np.float64) # 检查项大小 print("int32 数组的项大小:", array_int32.itemsize) print("float64 数组的项大小:", array_float64.itemsize)
以下是得到的输出 −
int32 数组的项大小:4 float64 数组的项大小:8
计算项大小的内存使用量
要计算数组占用的总内存,可以将"项大小"乘以数组中元素的总数。
例如,如果一个数组有"1000"个元素,项大小为"8"个字节,则该数组占用的总内存为"1000 * 8" = "8000"个字节。
示例
在此示例中,我们计算二维数组的总内存使用量 −
import numpy as np # 创建二维数组 array_2d = np.array([[1, 2], [3, 4]], dtype=np.float32) # 计算总内存使用量 total_memory_usage = array_2d.size * array_2d.itemsize print(f"总内存使用量:{total_memory_usage} 字节")
这将产生以下结果 -
总内存使用量:16 字节
不同数据类型的 itemsize
在 NumPy 中,不同的数据类型具有不同的 itemsize 值。例如 -
- np.int8 的项大小为 1 个字节。
- np.int16 的项大小为 2 个字节。
- np.float64 的项大小为 8 个字节。
- np.complex128 的项大小为 16 个字节。
示例
在下面的示例中,我们创建具有不同数据类型的数组,然后检查每个数组的项大小 -
import numpy as np # 创建具有不同数据类型的数组 array_int8 = np.array([1, 2, 3], dtype=np.int8) array_int16 = np.array([1, 2, 3], dtype=np.int16) array_uint32 = np.array([1, 2, 3], dtype=np.uint32) array_float16 = np.array([1.0, 2.0, 3.0], dtype=np.float16) array_complex128 = np.array([1+2j, 3+4j, 5+6j], dtype=np.complex128) # 检查元素大小 print("int8 数组元素大小:", array_int8.itemsize) print("int16 数组元素大小:", array_int16.itemsize) print("uint32 数组的项大小:", array_uint32.itemsize) print("float16 数组的项大小:", array_float16.itemsize) print("complex128 数组的项大小:", array_complex128.itemsize)
输出结果如下:-
int8 数组的项大小:1 int16 数组的项大小:2 uint32 数组的项大小:4 float16 数组的项大小:2 complex128 数组的项大小:16
通过修改数据类型更改项大小
通过修改数组的数据类型,您可以更改其项大小,这会影响每个元素占用的内存量,从而影响总内存数组的用法。
您可以使用 astype() 函数更改 NumPy 数组的数据类型。此函数接受要将数组转换为的目标数据类型。
示例
在以下示例中,我们将数组的数据类型从"int32"更改为"int8",并检查该数组的项大小 -
import numpy as np # 原始数组为 int32 array_original = np.array([1, 2, 3], dtype=np.int32) print(f"原始项大小:{array_original.itemsize} bytes") # 将数据类型更改为 int8 array_new = array_original.astype(np.int8) print(f"新的项大小:{array_new.itemsize} bytes")
执行上述代码后,我们得到以下输出−
原始项大小:4 bytes 新的项大小:1 bytes