NumPy 数组 itemsize 怎么获取和使用?

文章导读
Previous Quiz Next NumPy 数组 Itemsize NumPy 数组中的 itemsize 属性表示数组中每个元素的字节大小。此大小由数组元素的 data type(例如 integer、float)决定。
📋 目录
  1. NumPy 数组 Itemsize
  2. 访问数组 Itemsize
  3. 计算 Itemsize 内存使用量
  4. 不同 Data Type 的 Itemsize
  5. 通过修改数据类型来更改 Itemsize
A A

NumPy - 数组 Itemsize



Previous
Quiz
Next

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