np.ndarray 是 NumPy 库中的核心数据结构

np.ndarray 是 NumPy 库中的核心数据结构,代表一个多维数组(或称为矩阵)。它是一个高效的容器,用于存储和操作数据,可以包含任意类型的数据(整数、浮点数、布尔值等)。

主要特点:

  1. 多维:可以是一个一维、二维,甚至更高维度的数组。
  2. 统一数据类型 :一个 ndarray 中的所有元素必须具有相同的数据类型(例如,所有元素都为整数或浮点数)。
  3. 高效的内存布局ndarray 在内存中是连续存储的,使得数组操作非常高效。
  4. 广泛的操作:支持各种数学运算、矩阵运算、切片操作和广播等。

创建 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 的常用属性和方法:

  1. ndarray.shape :返回数组的维度(即每个轴上的大小)。返回一个元组 (rows, columns, ...)

    python 复制代码
    arr = np.array([[1, 2, 3], [4, 5, 6]])
    print(arr.shape)
    # 输出: (2, 3) 表示数组有 2 行 3 列
  2. ndarray.ndim:返回数组的维度数(即轴的数量)。

    python 复制代码
    print(arr.ndim)
    # 输出: 2,表示这是一个二维数组
  3. ndarray.size:返回数组的总元素个数。

    python 复制代码
    print(arr.size)
    # 输出: 6,表示有 6 个元素
  4. ndarray.dtype:返回数组中元素的数据类型。

    python 复制代码
    print(arr.dtype)
    # 输出: int64 或 float64(根据数组的实际数据类型)
  5. ndarray.itemsize:返回数组中每个元素的字节数。

    python 复制代码
    print(arr.itemsize)
    # 输出: 8,表示每个元素占用 8 个字节(对于 int64 类型)
  6. ndarray.reshape():改变数组的形状,但不改变数据。

    python 复制代码
    arr_reshaped = arr.reshape(3, 2)  # 将数组形状改变为 3 行 2 列
    print(arr_reshaped)
    # 输出:
    # [[1 2]
    #  [3 4]
    #  [5 6]]
  7. ndarray.flatten():将多维数组展开为一维数组。

    python 复制代码
    arr_flatten = arr.flatten()
    print(arr_flatten)
    # 输出: [1 2 3 4 5 6]

常用操作:

  1. 数组加法、减法、乘法和除法
    np.ndarray 支持各种数组间的算术运算,包括按元素相加、相减、相乘、相除等。

    python 复制代码
    arr1 = np.array([1, 2, 3])
    arr2 = np.array([4, 5, 6])
    
    print(arr1 + arr2)  # 元素相加
    # 输出: [5 7 9]
    
    print(arr1 * arr2)  # 元素相乘
    # 输出: [4 10 18]
  2. 数组的切片操作
    np.ndarray 支持类似于 Python 列表的切片操作,允许提取子数组。

    python 复制代码
    arr = np.array([10, 20, 30, 40, 50])
    
    print(arr[1:4])  # 获取从索引 1 到 3 的元素
    # 输出: [20 30 40]
    
    print(arr[:3])  # 获取前三个元素
    # 输出: [10 20 30]
  3. 广播(Broadcasting)

    NumPy 的广播机制允许不同形状的数组进行数学运算。简单来说,较小的数组会在必要时"扩展"以适应较大的数组。

    python 复制代码
    arr1 = np.array([1, 2, 3])
    arr2 = np.array([10])
    
    # arr2 会被广播到与 arr1 相同的形状
    print(arr1 + arr2)  # 输出: [11 12 13]

总结:

np.ndarray 是一个非常强大的数据结构,适用于各种数学和数据处理任务。它支持多维数组、各种操作(如算术运算、切片、广播等),并且效率非常高。在 NumPy 中,几乎所有的操作都围绕 ndarray 进行,因此它是数据科学、机器学习等领域的基础之一。

相关推荐
tt55555555555521 分钟前
多链表合并
数据结构·链表
Rossy Yan8 小时前
【C++数据结构——查找】二分查找(头歌实践教学平台习题)【合集】
开发语言·数据结构·c++·算法·查找·头歌实践教学平台·合集
don't_be_bald12 小时前
数据结构与算法-顺序表
c语言·开发语言·数据结构·学习·链表
帅到爆的努力小陈12 小时前
进制转换(蓝桥杯)
java·数据结构·算法
Y_3_716 小时前
146. LRU 缓存 : 实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构
数据结构·缓存
Cedric_Anik17 小时前
数据结构——二叉树
数据结构·算法
KeyPan18 小时前
【数据结构与算法:八、排序】
开发语言·数据结构·人工智能·后端·算法·排序算法·scala
running thunderbolt18 小时前
数据结构:二叉搜索树详解
数据结构
XWXnb618 小时前
数据结构:树
数据结构·算法
冠位观测者18 小时前
【Leetcode 热题 100】74. 搜索二维矩阵
数据结构·算法·leetcode