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

NumPy中通过行列索引选子矩阵赋值后原矩阵未变化的问题

问题分析与解决方案

问题根源

你的代码没能修改原矩阵A,核心原因是连续两次切片操作生成了临时副本,而非直接操作原矩阵的视图:

  • A[[9,3,4,5],:]会返回一个新的4×10数组(原矩阵的副本),不是原矩阵的引用
  • 后续[:,[9,3,4,5]]是对这个临时副本做切片,赋值操作只改动了这个临时数组,原矩阵A完全没被触及

正确实现方式

如果你想选中A中**行索引为[9,3,4,5]且列索引为[9,3,4,5]**的4×4子矩阵并赋值,需要用np.ix_将一维行列索引转换为二维网格索引,确保操作的是原矩阵的视图:

import numpy as np
A = np.zeros((10, 10))
B = np.ones((4,4))
rows = [9,3,4,5]
cols = [9,3,4,5]
# 用np.ix_生成网格索引,直接操作原矩阵的子矩阵视图
A[np.ix_(rows, cols)] = B
print(A)

补充说明

  • np.ix_(rows, cols)会把两个一维索引数组转换成可广播为二维的结构,这样A[np.ix_(rows, cols)]就能准确选中你需要的4×4子矩阵,且这是原矩阵的视图,赋值会直接生效
  • 如果直接写A[rows, cols],numpy会按元素对应关系选取(即(9,9)、(3,3)、(4,4)、(5,5)这四个元素),得到的是一维数组,不符合修改4×4子矩阵的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 19:58:18