Python 数据科学与可视化工具箱 (一) - 数组属性:`shape`, `dtype`, `ndim`, `size`

发布于:2025-08-03 ⋅ 阅读:(10) ⋅ 点赞:(0)

在前文中,我们学习了如何创建 NumPy 数组。创建数组只是第一步,要高效地操作和理解这些数组,你必须先了解它们的核心属性。这些属性就像是数组的“身份证”,详细描述了它的结构和内容。本篇将重点介绍 NumPy 数组最常用的四个属性:shape, dtype, ndim, 和 size


1. 为什么数组属性如此重要?

在处理数据时,你经常需要知道数据的维度、大小和类型,以便进行正确的计算和转换。例如:

  • 形状 (shape):你想对两个矩阵进行乘法运算,你必须先确认它们的形状是否符合乘法规则。
  • 数据类型 (dtype):你想计算一个数组的平均值,你需要知道它是否由数字组成,而不是字符串。
  • 维数 (ndim):你想将一个三维的图像数据展平为一维,你需要知道它的维数。
  • 总大小 (size):你想评估一个数组占用的内存大小,你需要知道它包含多少个元素。

掌握这些属性,能让你在数据处理中做到心中有数,避免许多常见的错误。


2. NumPy 数组核心属性详解

我们将通过一系列示例来深入了解这四个属性。

2.1 shape:数组的形状

shape 属性是一个元组,它告诉你在数组的每一个维度上,有多少个元素。元组的长度等于数组的维数 (ndim)。

  • 功能: 表示数组在每个轴上的大小。
  • 类型: 元组 (d1, d2, ..., dn),其中 d_id\_id_i 是第 iii 维的大小。

示例与说明:

import numpy as np

# 一维数组 (向量)
arr1d = np.array([1, 2, 3, 4, 5])
print("一维数组:", arr1d)
print("形状 (shape):", arr1d.shape) # 输出: (5,)
# 只有一个维度,大小为 5。元组中的逗号表示它是一个单元素元组。

# 二维数组 (矩阵)
arr2d = np.array([[10, 11, 12], [13, 14, 15]])
print("\n二维数组:\n", arr2d)
print("形状 (shape):", arr2d.shape) # 输出: (2, 3)
# 两个维度:第一个维度有 2 行,第二个维度有 3 列。

# 三维数组
arr3d = np.arange(1, 28).reshape(3, 3, 3)
print("\n三维数组:\n", arr3d)
print("形状 (shape):", arr3d.shape) # 输出: (3, 3, 3)
# 三个维度:3 个“页” (blocks),每个页有 3 行,每行有 3 列。

# shape 的灵活运用:重塑 (Reshaping)
# shape 属性本身是不可变的,但你可以使用 `reshape()` 方法来改变数组的形状。
arr = np.arange(12)
print("\n原始数组 (12个元素):", arr)
arr_reshaped = arr.reshape((3, 4))
print("重塑为 3x4 矩阵:\n", arr_reshaped)
print("新形状:", arr_reshaped.shape)
# 注意:重塑时新旧数组的元素总数必须相同 (12 = 3 * 4)。
# 重塑时,可以使用 -1 作为某个维度的大小,NumPy 会自动计算它。
arr_auto_reshaped = arr.reshape((2, -1))
print("自动计算形状 (2x6):\n", arr_auto_reshaped)
print("新形状:", arr_auto_reshaped.shape)

shape 是数据处理和算法设计中最关键的属性之一。

2.2 dtype:数组的数据类型

dtype 属性描述了数组中元素的数据类型。因为 ndarray 是同质的,所有元素都必须是相同类型。NumPy 支持比标准 Python 类型更丰富的数值类型,例如 int8, int32, float64, bool_ 等,这使得内存使用更高效,计算更精确。

  • 功能: 表示数组中每个元素的数据类型。
  • 类型: numpy.dtype