NumPy - 数组 Itemsize
NumPy 数组 Itemsize
NumPy 数组中的 itemsize 属性表示数组中每个元素的字节大小。此大小由数组元素的 data type(例如 integer、float)决定。
通过了解 itemsize,您可以估算数组的总内存消耗。这对于理解数组的内存布局和存储需求非常重要,尤其是在处理大型数据集时。
访问数组 Itemsize
您可以使用 itemsize 属性访问 NumPy 数组的 itemsize。该属性返回一个整数,表示数组中每个元素的字节大小。
示例
在以下示例中,我们访问了一个 integer 数组和一个 float 数组的 itemsize −
import numpy as np
# 创建具有不同 data type 的数组
array_int32 = np.array([1, 2, 3], dtype=np.int32)
array_float64 = np.array([1.0, 2.0, 3.0], dtype=np.float64)
# 检查 itemsize
print("Itemsize of int32 array:", array_int32.itemsize)
print("Itemsize of float64 array:", array_float64.itemsize)
输出结果如下 −
Itemsize of int32 array: 4 Itemsize of float64 array: 8
计算 Itemsize 内存使用量
要计算数组占用的总内存,您可以将 "itemsize" 乘以数组中元素的总数。
例如,如果一个数组有 "1000" 个元素且 itemsize 为 "8" 字节,则该数组的总内存使用量为 "1000 * 8" = "8000" 字节。
示例
在本示例中,我们计算了一个 2D 数组的总内存使用量 −
import numpy as np
# 创建一个 2D 数组
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: {total_memory_usage} bytes")
输出结果如下 −
Total memory usage: 16 bytes
不同 Data Type 的 Itemsize
在 NumPy 中,不同的 data type 具有不同的 itemsize 值。例如 −
- np.int8 的 itemsize 为 1 字节。
- np.int16 的 itemsize 为 2 字节。
- np.float64 的 itemsize 为 8 字节。
- np.complex128 的 itemsize 为 16 字节。
示例
在下面的示例中,我们创建了具有不同 data type 的数组,然后检查每个数组的 itemsize −
import numpy as np
# 创建具有不同 data type 的数组
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)
# 检查 itemsize
print("Itemsize of int8 array:", array_int8.itemsize)
print("Itemsize of int16 array:", array_int16.itemsize)
print("Itemsize of uint32 array:", array_uint32.itemsize)
print("Itemsize of float16 array:", array_float16.itemsize)
print("Itemsize of complex128 array:", array_complex128.itemsize)
输出结果如下 −
Itemsize of int8 array: 1 Itemsize of int16 array: 2 Itemsize of uint32 array: 4 Itemsize of float16 array: 2 Itemsize of complex128 array: 16
通过修改数据类型来更改 Itemsize
通过修改数组的数据类型,你可以更改其 itemsize,这会影响每个元素占用的内存量,从而影响数组的总内存使用量。
你可以使用 astype() 函数来更改 NumPy 数组的数据类型。该函数接受你想要转换到的目标数据类型。
示例
在以下示例中,我们将一个数组的数据类型从 "int32" 更改为 "int8",并检查该数组的 itemsize −
import numpy as np
# 原始数组,使用 int32
array_original = np.array([1, 2, 3], dtype=np.int32)
print(f"Original itemsize: {array_original.itemsize} bytes")
# 将数据类型更改为 int8
array_new = array_original.astype(np.int8)
print(f"New itemsize: {array_new.itemsize} bytes")
执行上述代码后,我们将得到以下输出 −
Original itemsize: 4 bytes New itemsize: 1 bytes