NumPy数组行列元素提取错误,求正确提取指定元素的方法
解决Numpy数组索引错误的问题
首先,咱们先明确你创建的数组到底是什么样的——运行你给出的代码后,data的实际内容是:
import numpy as np data = np.arange(35).reshape(7,5) print(data)
输出结果:
[[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14] [15 16 17 18 19] [20 21 22 23 24] [25 26 27 28 29] [30 31 32 33 34]]
你用data[-3:, -2:]得到的结果是符合索引规则的,但不符合你红色标记的区域,问题出在你对Numpy索引范围的选择上:
-3:是取数组的最后3行(对应上面的第5、6、7行)-2:是取数组的最后2列(对应上面的第4、5列)
根据常见的使用场景,我给你几种可能的正确索引方式,你可以对应红色标记区域选择:
情况1:红色标记是中间3行(第3-5行)的最后2列
用这个代码:
result = data[2:5, -2:]
输出结果:
[[13 14] [18 19] [23 24]]
情况2:红色标记是前3行的最后2列
用这个代码:
result = data[:3, -2:]
输出结果:
[[ 3 4] [ 8 9] [13 14]]
情况3:红色标记是最后3行的前2列
用这个代码:
result = data[-3:, :2]
输出结果:
[[20 21] [25 26] [30 31]]
另外给你补个小知识点,避免以后再踩索引的坑:
- Numpy的索引格式是
data[行范围, 列范围],行在前,列在后 - 冒号
:的用法:a:b:取从索引a(包含)到b(不包含)的元素:b:从开头取到索引b(不包含)a::从索引a(包含)取到末尾-n::从倒数第n个元素取到末尾:-n:从开头取到倒数第n个元素(不包含)
如果红色标记的区域不在上面这几种里,可以告诉我具体包含哪些元素,我再帮你调整索引~
内容的提问来源于stack exchange,提问作者Roman
相关产品推荐
相关产品推荐

