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

Python中如何用两个一维数组对二维数组进行下标索引

嗨,从Matlab转Python遇到索引逻辑的差异太正常了,我来帮你搞定这个问题!

首先得搞清楚你原来的写法为啥不对:
当你写a[patch]的时候,确实会取出前两行,得到一个2×3的数组;但接着写[patch],其实是对这个新的2×3数组再次按行索引,相当于取它的前两行(也就是它本身),所以结果还是2×3,这和你想要的同时对原数组的行、列进行索引完全不是一回事儿。

在NumPy里,要实现类似Matlab中a(patch,patch)的二维块索引(也就是取出所有行在patch里、列也在patch里的元素),有两种很直观的方法:

方法1:手动给行索引增加一个维度

通过patch[:, np.newaxis]把一维的patch变成二维的列向量,这样和列索引的patch组合时,NumPy会自动广播成二维的网格索引,就能得到你要的2×2矩阵:

import numpy as np
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
patch = np.arange(2)

result = a[patch[:, np.newaxis], patch]
print(result)
# 输出:
# [[1 2]
#  [4 5]]

方法2:用np.ix_函数更直观

NumPy专门提供了np.ix_函数来生成这种网格索引,可读性更强,尤其适合复杂的索引场景:

result = a[np.ix_(patch, patch)]
print(result)
# 同样输出:
# [[1 2]
#  [4 5]]

简单说,np.ix_(patch, patch)会把两个一维数组转换成能正确匹配的行、列索引对,帮你避免手动处理维度的麻烦。

对比Matlab的话,NumPy的索引更强调维度的匹配:直接用两个一维数组逗号分隔的话(比如a[patch, patch]),会得到(0,0)和(1,1)位置的元素,也就是[1,5],这是元素级的配对索引,不是你要的块索引,这也是两者最大的区别之一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:26:03