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

如何用索引列表将小数组嵌入大数据组?Python实现Matlab对应功能

在NumPy中实现Matlab风格的二维索引赋值

嘿,这个问题我太熟悉了!刚用NumPy的时候也被这个索引逻辑坑过——直接写M[indx, indx]根本达不到Matlab里的子矩阵操作效果,因为两者的一维索引配对规则不一样。不过别担心,用np.ix_()就能完美解决!

问题根源

Matlab里M(indx, indx)会生成一个3×3的子矩阵,对应行和列都取indx里的索引;但NumPy里直接用M[indx, indx],会把两个一维数组当成索引对,只取(0,0)、(2,2)、(3,3)这三个对角元素,完全不是我们要的3×3子矩阵。

正确实现代码

import numpy as np

# 创建5×5零数组
M = np.zeros((5,5))
# 创建3×3目标数组
m = np.array([[1,2,3],[4,5,6],[7,8,9]])
# 索引列表
indx = [0, 2, 3]

# 用np.ix_构造二维网格索引,完美匹配Matlab的M(indx,indx)行为
M[np.ix_(indx, indx)] += m

# 打印结果
print(M)

输出结果

运行上面的代码,你会得到和Matlab操作完全一致的输出:

[[ 1.  0.  2.  3.  0.]
 [ 0.  0.  0.  0.  0.]
 [ 4.  0.  5.  6.  0.]
 [ 7.  0.  8.  9.  0.]
 [ 0.  0.  0.  0.  0.]]

小补充

np.ix_(indx, indx)的作用是把两个一维索引数组转换成能广播成二维网格的索引结构,让NumPy按照行和列的笛卡尔积选取子矩阵,彻底对齐Matlab的索引逻辑。

内容的提问来源于stack exchange,提问作者J. Serra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:51:18