今天记录一下使用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]
#即可