numpy矩阵取出当中的子矩阵

博客讲述了在使用numpy操作数组时,如何正确地取出子矩阵。错误的做法是连续使用两次中括号并分别指定步进,这会导致不期望的结果。正确的解决方案是使用单个中括号并直接指定行列范围,如`matrix[0:3,1:4]`。
摘要由CSDN通过智能技术生成

今天记录一下使用numpy遇到的坑。
假设我们现在有一个numpy数组matrix,如果我们需要访问该数组的第i行第j列的元素,我们可以直接采用matrix[ i ][ j ],但现在我们如果想要取出其中的一个子矩阵该如何操作呢?
本人最开始的愚蠢做法是在两个中括号里面分别使用步进表达式,例如我要取出第1行到第3行以及第第二列到第4列之间的子矩阵:

import numpy as np
matrix=np.array([[1,1,1,1,1],[0,0,0,0,0],[2,2,2,2,2],[3,3,3,3,3]])
print(matrix[0:3][1:4])

我们理想的输出是:

[[1 1 1]
 [0 0 0]
 [2 2 2]]

但实际上是

[[0 0 0 0 0]
 [2 2 2 2 2]]

这是因为matrix[0:3][1:4]会首先取出第1行到第三行得到:
[[1,1,1,1,1],[0,0,0,0,0],[2,2,2,2,2]]
然后再取出上述新矩阵的第2行到第4行,由于只有3行所以最终的输出为取出上述新矩阵的第二行到第三行,也就得到了我们的上述错误结果。
其实正确的解决办法很简单

#只需将
matrix[0:3][1:4]
#改为
matrix[0:3,1:4]
#即可
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值