假设我在Python中使用numpy,并且我有一个任意大小的二维数组。为了方便起见,假设我有一个5 x 5阵列。具体数字对我的问题并不特别重要;他们只是一个例子。用numpy围绕二维数组的边缘切片
a = numpy.arrange(25).reshape(5,5)
这产生了:
[[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]]
现在,让我们说,我想借此阵列的2D切片。在正常情况下,这很容易。为了得到我会简单地使用a[1:4,1,4]
这将产生紧邻2,2单元的预期
[[6, 7, 8 ],
[11, 12, 13],
[16, 17, 18]]
但是,如果我想获得那些环绕在阵列的边缘 片是什么?例如a[-1:2,-1:2]
会产生:
[24, 20, 21],
[4, 0, 1 ],
[9, 5, 6 ]
这将是有用的几种情况下的边缘并不重要,例如游戏图形周围的屏幕包。我意识到这可以通过很多if语句和边界检查来完成,但我想知道是否有更清晰,更习惯的方法来实现这一点。
环顾四周,我发现了几个答案,如:https://stackoverflow.com/questions/17739543/wrapping-around-slices-in-python-numpy适用于一维数组,但我还没有弄清楚如何将这个逻辑应用到2D切片。
所以基本上,问题是:如何在numpy中采用二维数组的2D片段来环绕数组的边缘?
提前感谢任何能够帮助的人。
你为什么不只是压平,然后重塑数组,然后使用'array.take我已经“花哨索引”和利用meshgrid功能解决了这个(indices,mode ='wrap')'? – agconti
看起来像这个问题:http://stackoverflow.com/questions/4148292/how-do-i-select-a-window-from-a-numpy-array-with-periodic-boundary-conditions虽然它看起来像那样一个给出一个副本,而不是一个视图... – IanH
@IanH - 是的,这似乎做我想要的。谢谢。在发帖之前我没有看到那个人。 –