目录

 

numpy 介绍

安装与基础用法

        特殊数组创建方法

数值序列生成方法

关键区别与适用场景

numpy索引的基本方法

        1基本索引

       2切片索引

        3布尔索引

        4花式索引

NumPy 数组合并方法

        vstack 垂直合并

        hstack 水平合并

        concatenate 通用合并

注意事项

数组分割方法

vsplit函数

hsplit函数

split函数

dsplit函数

array_split函数

参数说明

核心要点总结

 

numpy 介绍

    NumPy(Numerical Python)是 Python 科学计算领域的核心基础库,核心提供了高性能的多维数组对象ndarray,以及一套专为数组设计的高效操作函数。相较于 Python 原生列表,NumPy 数组在数值计算、批量数据处理中能实现数量级的效率提升,是数据分析、机器学习、数值模拟等领域的必备工具。numpy的数据类型为ndarray


安装与基础用法

        通过 pip 安装:pip install numpy

        创建数组示例:

# 创建2行3列的二维数组
arr = np.array([[1, 2, 3], [4, 5, 6]])

# ndim:返回整数,表示数组的维度(也叫秩)
print("数组维度:", arr.ndim)  # 输出:2

# shape:返回元组,表示数组的形状(行×列),多维数组为(维1,维2,维3...)
print("数组形状:", arr.shape)  # 输出:(2, 3)

# size:返回整数,表示数组中元素的总个数
print("元素总个数:", arr.size)  # 输出:6

# dtype:返回数组元素的数据类型,NumPy支持多种数值类型
print("元素数据类型:", arr.dtype)  # 输出:int64(Windows多为int32,不影响使用)

        shape是最常用的属性,直接赋值可修改数组形状,如arr.shape = (3,2)可将 2 行 3 列数组转为 3 行 2 列,要求总元素个数不变;

        创建数组时可通过dtype手动指定类型,避免默认类型带来的问题,如np.array([1,2], dtype=np.float32)

        可通过arr.dtype = np.float64修改已有数组的元素类型  

        特殊数组创建方法

 zeros
创建指定形状的全零数组,默认数据类型为 float64
语法:np.zeros(shape, dtype=float)
示例:

import numpy as np  
arr = np.zeros((2, 3))  # 生成 2 行 3 列的零矩阵  

ones
创建指定形状的全 1 数组,默认数据类型为 float64
语法:np.ones(shape, dtype=float)
示例:

arr = np.ones((3, 2), dtype=int)  # 生成 3 行 2 列的全 1 整型矩阵  

empty
创建未初始化的数组,内容取决于内存状态,速度比 zeros 快。
语法:np.empty(shape, dtype=float)
示例:

arr = np.empty((2, 2))  # 生成未初始化的 2x2 数组  

eye
创建单位矩阵(对角线为 1,其余为 0)。
语法:np.eye(N, M=None, k=0, dtype=float)

  • k 控制对角线偏移(正数向上偏移,负数向下偏移)。
    示例:
arr = np.eye(3)        # 3x3 单位矩阵  
arr_k = np.eye(3, k=1) # 对角线向上偏移 1  

 

数值序列生成方法

arange
生成等差序列,类似 Python 的 range,但支持浮点数。
语法:np.arange(start, stop, step, dtype=None)

  • 区间为左闭右开 [start, stop)
    示例:
arr = np.arange(0, 10, 2)      # [0, 2, 4, 6, 8]  
arr_float = np.arange(0, 1, 0.3)  # [0.0, 0.3, 0.6, 0.9]  

linspace
生成指定数量的等间隔数值,区间为闭区间 [start, stop]
语法:np.linspace(start, stop, num=50, endpoint=True)

  • endpoint 控制是否包含终点。
    示例:
arr = np.linspace(0, 1, 5)  # [0.0, 0.25, 0.5, 0.75, 1.0]  
arr_no_end = np.linspace(0, 1, 5, endpoint=False)  # [0.0, 0.2, 0.4, 0.6, 0.8]  

 

关键区别与适用场景

  • zeros/ones/eye 用于固定值初始化,empty 适合快速分配内存但无需初始值的场景。
  • arange 适合已知步长的序列,linspace 适合精确控制样本数量的场景(如绘图坐标生成)。

 

 

numpy索引的基本方法

        NumPy提供了多种索引方式,用于访问和修改数组中的元素。常用的索引方法包括基本索引、切片索引、布尔索引和花式索引。

        1基本索引

        基本索引通过整数位置访问元素。对于一维数组,使用单个整数;对于多维数组,使用逗号分隔的整数元组

import numpy as np
arr = np.array([1, 2, 3, 4])
print(arr[2])  # 输出3

arr_2d = np.array([[1, 2, 3], [4, 5, 6]])
print(arr_2d[1, 2])  # 输出6
 

       2切片索引

        切片索引允许选择数组的子集。语法与Python列表切片类似,但支持多维切片。

arr = np.array([0, 1, 2, 3, 4, 5])
print(arr[1:4])  # 输出[1 2 3]

arr_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr_2d[:2, 1:])  # 输出[[2 3][5 6]]
 

        3布尔索引

        布尔索引使用布尔数组选择元素。常用于条件筛选。

arr = np.array([1, 2, 3, 4])
mask = arr > 2
print(arr[mask])  # 输出[3 4]

names = np.array(['Alice', 'Bob', 'Charlie'])
scores = np.array([85, 90, 75])
print(scores[names == 'Bob'])  # 输出[90]
 

        4花式索引

        花式索引使用整数数组进行索引,可以非连续地选择元素

arr = np.array([10, 20, 30, 40, 50])
indices = [1, 3, 4]
print(arr[indices])  # 输出[20 40 50]

arr_2d = np.array([[1, 2], [3, 4], [5, 6]])
row_indices = [0, 2]
col_indices = [1, 0]
print(arr_2d[row_indices, col_indices])  # 输出[2 5]
 

NumPy 数组合并方法

        vstack 垂直合并

   vstack 用于垂直方向(按行)合并数组,要求所有数组的列数相同。适用于将多个一维或二维数组堆叠成更高维度的数组。

示例代码:

import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
result = np.vstack((a, b))

#结果[[1 2 3]
 [4 5 6]]

        hstack 水平合并

   hstack 用于水平方向(按列)合并数组,要求所有数组的行数相同。适用于连接相同行数的数组。

示例代码:

a = np.array([[1], [2]])
b = np.array([[3], [4]])
result = np.hstack((a, b))

#结果[[1 3]
 [2 4]]

        concatenate 通用合并

concatenate 是最通用的合并函数,通过 axis 参数指定合并方向(axis=0 垂直合并,axis=1 水平合并)。支持更高维度的数组合并。

示例代码:

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])
result = np.concatenate((a, b), axis=0)

#结果[[1 2]
 [3 4]
 [5 6]]

注意事项

  • 合并前需确保数组在合并维度上的形状匹配
  • 对于一维数组,vstack 会将其转为二维数组后合并
  • stack 函数会新增一个维度进行合并(不同于连接操作)
  • 大数组合并时建议预分配内存以提高性能

 

 

数组分割方法

NumPy提供了多种数组分割函数,用于将数组拆分为多个子数组。以下是常用的分割方法:

vsplit函数

垂直分割数组,沿垂直方向(行方向)分割。适用于二维及以上数组。

import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
result = np.vsplit(arr, 3)  # 分割为3个子数组

hsplit函数

水平分割数组,沿水平方向(列方向)分割。适用于二维及以上数组。

arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
result = np.hsplit(arr, 3)  # 分割为3个子数组

split函数

通用分割函数,可指定分割轴(axis参数)。默认沿第一个轴(axis=0)分割。

arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
result = np.split(arr, 3, axis=1)  # 沿列方向分割

dsplit函数

深度方向分割,适用于三维数组。

arr = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
result = np.dsplit(arr, 2)  # 沿深度方向分割

array_split函数

允许不均等分割,当不能均分时不会报错。

arr = np.array([1, 2, 3, 4, 5, 6])
result = np.array_split(arr, 4)  # 分成4个不等长子数组

参数说明

  • 所有分割函数都接受两个主要参数:待分割数组和分割数量
  • split函数可额外指定axis参数决定分割方向
  • 分割数量必须是能整除对应轴长度的值(array_split除外)

 

核心要点总结

        数组创建按需选择:np.array()是基础转换方式,zeros/ones/eye用于标准化初始化,arange/linspace生成有序序列,np.random生成随机数数组;

        有序序列区别:arange步长生成(不包含终止值),linspace元素个数生成(默认包含终止值),reshape可灵活调整数组形状;

        运算核心:支持标量 / 数组的逐元素向量化运算,矩阵乘法需用np.dot(),聚合运算通过axis指定按行 / 列计算;

        索引技巧:二维数组核心格式[行,列],布尔索引可实现多条件筛选,是数据提取的高效方式;

        合并分割规则:核心是维度匹配,垂直操作(vstack/vsplit)按行处理,水平操作(hstack/hsplit)按列处理,concatenate/split是通用型函数;

        效率原则:尽量使用 NumPy 内置函数和向量化运算,避免编写 Python 循环,这是 NumPy 高效的关键

 

 

 

 

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐