NumPy - 数组元素大小



NumPy 数组元素大小

NumPy 数组中的itemsize属性指示数组中每个元素的大小(以字节为单位)。此大小由数组元素的数据类型(例如,整数、浮点数)确定。

通过了解itemsize,您可以估计数组的总内存消耗。这对于理解数组的内存布局和存储需求非常重要,尤其是在处理大型数据集时。

访问数组元素大小

您可以使用itemsize属性访问 NumPy 数组的itemsize。此属性返回一个整数,表示数组中每个元素的大小(以字节为单位)。

示例

在下面的示例中,我们访问整数数组和浮点数数组的itemsize:

import numpy as np

# Creating arrays with different data types
array_int32 = np.array([1, 2, 3], dtype=np.int32)
array_float64 = np.array([1.0, 2.0, 3.0], dtype=np.float64)

# Checking 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”字节。

示例

在这个例子中,我们计算一个二维数组的总内存使用情况:

import numpy as np

# Create a 2D array
array_2d = np.array([[1, 2], [3, 4]], dtype=np.float32)

# Calculate total memory usage
total_memory_usage = array_2d.size * array_2d.itemsize
print(f"Total memory usage: {total_memory_usage} bytes")

这将产生以下结果:

Total memory usage: 16 bytes

不同数据类型的itemsize

在 NumPy 中,不同的数据类型具有不同的 itemsize 值。例如:

  • np.int8 的 itemsize 为 1 字节。
  • np.int16 的 itemsize 为 2 字节。
  • np.float64 的 itemsize 为 8 字节。
  • np.complex128 的 itemsize 为 16 字节。

示例

在下面的示例中,我们创建具有不同数据类型的数组,然后检查每个数组的itemsize:

import numpy as np

# Creating arrays with different data types
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)

# Checking 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

# Original array with int32
array_original = np.array([1, 2, 3], dtype=np.int32)
print(f"Original itemsize: {array_original.itemsize} bytes")

# Change data type to int8
array_new = array_original.astype(np.int8)
print(f"New itemsize: {array_new.itemsize} bytes")

执行上述代码后,我们将获得以下输出:

Original itemsize: 4 bytes
New itemsize: 1 bytes
广告