np.ndarray
是 NumPy 库中的核心数据结构,代表一个多维数组(或称为矩阵)。它是一个高效的容器,用于存储和操作数据,可以包含任意类型的数据(整数、浮点数、布尔值等)。
主要特点:
- 多维:可以是一个一维、二维,甚至更高维度的数组。
- 统一数据类型 :一个
ndarray
中的所有元素必须具有相同的数据类型(例如,所有元素都为整数或浮点数)。 - 高效的内存布局 :
ndarray
在内存中是连续存储的,使得数组操作非常高效。 - 广泛的操作:支持各种数学运算、矩阵运算、切片操作和广播等。
创建 np.ndarray
:
创建一个 ndarray
最常见的方法是通过 np.array()
,或者通过一些特定的函数如 np.zeros()
、np.ones()
等。
1. 通过 np.array()
创建数组:
python
import numpy as np
# 创建一个一维数组
arr = np.array([1, 2, 3, 4])
print(arr)
# 输出: [1 2 3 4]
print(type(arr))
# 输出: <class 'numpy.ndarray'>
# 创建一个二维数组
arr2d = np.array([[1, 2], [3, 4]])
print(arr2d)
# 输出:
# [[1 2]
# [3 4]]
2. 通过 np.zeros()
创建数组:
np.zeros()
用于创建一个指定形状、初始化为 0 的数组。
python
arr_zeros = np.zeros((3, 4)) # 3行4列的零数组
print(arr_zeros)
# 输出:
# [[0. 0. 0. 0.]
# [0. 0. 0. 0.]
# [0. 0. 0. 0.]]
3. 通过 np.ones()
创建数组:
np.ones()
用于创建一个指定形状、初始化为 1 的数组。
python
arr_ones = np.ones((2, 3)) # 2行3列的全1数组
print(arr_ones)
# 输出:
# [[1. 1. 1.]
# [1. 1. 1.]]
4. 通过 np.empty()
创建数组:
np.empty()
用于创建一个指定形状、但没有初始化的数组。返回的数组中的元素值是未定义的,因此不应依赖这些值。
python
arr_empty = np.empty((2, 2)) # 2x2 空数组
print(arr_empty)
# 输出:数组中的值是未初始化的,可能是垃圾值。
5. 通过 np.arange()
创建数组:
np.arange()
用于创建一个类似 range()
的数组,可以指定步长。
python
arr_range = np.arange(0, 10, 2) # 从 0 到 10(不包括 10),步长为 2
print(arr_range)
# 输出: [0 2 4 6 8]
6. 通过 np.linspace()
创建数组:
np.linspace()
用于创建一个均匀分布的数组,常用于生成等间隔的值。
python
arr_linspace = np.linspace(0, 1, 5) # 从 0 到 1,生成 5 个等间隔的数
print(arr_linspace)
# 输出: [0. 0.25 0.5 0.75 1. ]
np.ndarray
的常用属性和方法:
-
ndarray.shape
:返回数组的维度(即每个轴上的大小)。返回一个元组(rows, columns, ...)
。pythonarr = np.array([[1, 2, 3], [4, 5, 6]]) print(arr.shape) # 输出: (2, 3) 表示数组有 2 行 3 列
-
ndarray.ndim
:返回数组的维度数(即轴的数量)。pythonprint(arr.ndim) # 输出: 2,表示这是一个二维数组
-
ndarray.size
:返回数组的总元素个数。pythonprint(arr.size) # 输出: 6,表示有 6 个元素
-
ndarray.dtype
:返回数组中元素的数据类型。pythonprint(arr.dtype) # 输出: int64 或 float64(根据数组的实际数据类型)
-
ndarray.itemsize
:返回数组中每个元素的字节数。pythonprint(arr.itemsize) # 输出: 8,表示每个元素占用 8 个字节(对于 int64 类型)
-
ndarray.reshape()
:改变数组的形状,但不改变数据。pythonarr_reshaped = arr.reshape(3, 2) # 将数组形状改变为 3 行 2 列 print(arr_reshaped) # 输出: # [[1 2] # [3 4] # [5 6]]
-
ndarray.flatten()
:将多维数组展开为一维数组。pythonarr_flatten = arr.flatten() print(arr_flatten) # 输出: [1 2 3 4 5 6]
常用操作:
-
数组加法、减法、乘法和除法 :
np.ndarray
支持各种数组间的算术运算,包括按元素相加、相减、相乘、相除等。pythonarr1 = np.array([1, 2, 3]) arr2 = np.array([4, 5, 6]) print(arr1 + arr2) # 元素相加 # 输出: [5 7 9] print(arr1 * arr2) # 元素相乘 # 输出: [4 10 18]
-
数组的切片操作 :
np.ndarray
支持类似于 Python 列表的切片操作,允许提取子数组。pythonarr = np.array([10, 20, 30, 40, 50]) print(arr[1:4]) # 获取从索引 1 到 3 的元素 # 输出: [20 30 40] print(arr[:3]) # 获取前三个元素 # 输出: [10 20 30]
-
广播(Broadcasting) :
NumPy 的广播机制允许不同形状的数组进行数学运算。简单来说,较小的数组会在必要时"扩展"以适应较大的数组。
pythonarr1 = np.array([1, 2, 3]) arr2 = np.array([10]) # arr2 会被广播到与 arr1 相同的形状 print(arr1 + arr2) # 输出: [11 12 13]
总结:
np.ndarray
是一个非常强大的数据结构,适用于各种数学和数据处理任务。它支持多维数组、各种操作(如算术运算、切片、广播等),并且效率非常高。在 NumPy 中,几乎所有的操作都围绕 ndarray
进行,因此它是数据科学、机器学习等领域的基础之一。