请教numpy高级索引问题

狐帝 2020-07-29 11:48:15
在菜鸟教程里看到一个取出矩阵四个角的元素值的例子如下:

import numpy as np

x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]])
print ('我们的数组是:' )
print (x)
print ('\n')
rows = np.array([[0,0],[3,3]])
cols = np.array([[0,2],[0,2]])
y = x[rows,cols]
print ('这个数组的四个角元素是:')
print (y)

结果是:

我们的数组是:
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
这个数组的四个角元素是:
[[ 0 2]
[ 9 11]]

这一段代码我无论如何看不懂,不明白怎么就把四个角的元素取出来了。
哪位高人大侠能给详细解释一下这段代码吗?
万分感谢!!!
...全文
127 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
冰风漫天 2020-07-30
  • 打赏
  • 举报
回复
rows对应了x中的第几个列表,0对应[0,1,2],3对应[9,10,11] cols对应了列表中的第几个值,rows=3,cols=0对应了9
狐帝 2020-07-30
  • 打赏
  • 举报
回复
引用 1 楼 冰风漫天 的回复:
rows对应了x中的第几个列表,0对应[0,1,2],3对应[9,10,11] cols对应了列表中的第几个值,rows=3,cols=0对应了9
大侠说的太高深,我还是没看明白。 不过后来看了一篇博文(NumPy之四:高级索引和索引技巧),总算弄懂了: 取以下二维数组四个角的值:

x = 
[[0  1  2]
 [3  5  5]
 [6  7  8]
 [9 10 11]]
构造行索引矩阵:rows = numpy.array([[0, 0], [3, 3]]),于是:

rows = 
[[r00  r01]
 [r10  r11]]
 =
[[0 0]
 [3 3]]   
构造列索引矩阵:cols = numpy.array([[0, 2], [0, 2]]),于是:

cols = 
[[c00  c01]
 [c10  c11]]
 = 
[[0 2]
 [0 2]]
矩阵x的四个角的坐标分别由(r00, c00), (r01, c01), (r10, c10), (r11, c11)组成,构成矩阵索引如下:

[[(r00, c00)  (r01, c01)]
 [(r10, c10)  (r11, c11)]]
对矩阵x来说,坐标(r00, c00)的值为
x(r00, c00) = x(0, 0) = 0
同理:

x(r01, c01) = x(0, 2) = 2
x(r10, c10) = x(3, 0) = 9
x(r11, c11) = x(3, 2) = 11
最终,四个角构成的矩阵为:

y =x[rows, cols] = 
[[0 2]
 [9 11]]

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧