You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB中P(peo,peo)=W(peo,peo)的Python等效实现(保复杂度)

MATLAB稀疏矩阵子块赋值的Python等价实现

当然存在对应的Python实现,且能保持和MATLAB操作相同的计算与时间复杂度,核心是借助SciPy的稀疏矩阵工具完成,具体操作如下:

前置准备

确保已导入所需库:

import numpy as np
import scipy.sparse as sp

索引适配

MATLAB使用1基索引,Python采用0基索引。如果peo向量是从MATLAB导出的,需先转换为0基:

peo = np.asarray(peo) - 1  # 仅当peo为MATLAB风格1基索引时执行

实现步骤

假设P是SciPy的稀疏矩阵(推荐使用与MATLAB一致的csc_matrix格式),W可以是稠密矩阵(numpy.ndarray)或稀疏矩阵:

  1. 提取W的目标子块

    if isinstance(W, sp.spmatrix):
        w_sub = W[peo, peo]
    else:
        # 稠密矩阵提取子块后转成CSC格式稀疏矩阵
        w_sub = sp.csc_matrix(W[peo][:, peo])
    
  2. 对稀疏矩阵P的指定子块赋值
    CSC/CSR格式的稀疏矩阵不适合直接修改,先转换为LIL格式(便于灵活修改),完成赋值后再转回原格式:

    # 转换为LIL格式
    P_lil = P.tolil()
    # 清空目标子块旧值
    P_lil[peo, peo] = 0
    # 赋值新子块值
    P_lil[peo, peo] = w_sub
    # 转回CSC格式(保持与MATLAB存储一致)
    P = P_lil.tocsc()
    

时间复杂度说明

上述操作的时间复杂度为O(k²)(k为peo向量的长度),与MATLAB中的P(peo, peo) = W(peo, peo)完全一致,两者都是针对k×k的子块进行赋值操作,稀疏矩阵格式的合理转换保证了操作效率。

内容的提问来源于stack exchange,提问作者Anto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 14:10:45