首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从NumPy 2d数组中提取mxm子矩阵(n>m)?

如何从NumPy 2d数组中提取mxm子矩阵(n>m)?
EN

Stack Overflow用户
提问于 2010-11-23 23:05:08
回答 7查看 220.3K关注 0票数 181

我想对一个NumPy n×n数组进行切片。我想提取该数组的m行和m列的任意选择(即没有任何行数/列数模式),使其成为一个新的mxm数组。在本例中,假设数组为4x4,我想从中提取一个2x2数组。

下面是我们的数组:

代码语言:javascript
复制
from numpy import *
x = range(16)
x = reshape(x,(4,4))

print x
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]

要删除的行和列是相同的。最简单的情况是,当我想提取一个位于开头或结尾的2x2子矩阵时,即:

代码语言:javascript
复制
In [33]: x[0:2,0:2]
Out[33]: 
array([[0, 1],
       [4, 5]])

In [34]: x[2:,2:]
Out[34]: 
array([[10, 11],
       [14, 15]])

但是,如果我需要删除另一个行/列的混合怎么办?如果我需要删除第一行和第三行,从而提取子矩阵[[5,7],[13,15]],该怎么办?可以有行/行的任何组合。我在某处读到,我只需要使用行和列的索引的数组/列表来索引我的数组,但这似乎不起作用:

代码语言:javascript
复制
In [35]: x[[1,3],[1,3]]
Out[35]: array([ 5, 15])

我找到了一种方法,那就是:

代码语言:javascript
复制
    In [61]: x[[1,3]][:,[1,3]]
Out[61]: 
array([[ 5,  7],
       [13, 15]])

第一个问题是它很难阅读,尽管我可以接受这一点。如果有人有更好的解决方案,我当然想听听。

另一件事是我读到了on a forum,用数组索引数组迫使NumPy复制所需的数组,因此当处理大型数组时,这可能会成为一个问题。为什么会这样/这种机制是如何工作的?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4257394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档