反转索引的行,python

时间:2016-10-26 03:15:23

标签: python algorithm indexing reverse

我的数据带有(x,y)坐标,起源于左下角。我变成了一个矩阵,索引从0开始,看起来像那样:

| 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|

例如(x,y)=(1,4)id = y * 5 + x = 21.但是我希望它来自左下角,以便我获得一个索引类似的矩阵:

| 20| 21| 22| 23| 24|
| 15| 16| 17| 18| 19|
| 10| 11| 12| 13| 14|
| 5 | 6 | 7 | 8 |  9|
| 0 | 1 | 2 | 3 |  4|

所以基本上颠倒了行。有没有办法用pythonic方式做到这一点?否则,实现它的计算效率最高的方法是什么?

5 个答案:

答案 0 :(得分:1)

我不确定是否是“Pythonic”,但对我来说最直接有效的方法就是:

u = [v[5 * (len(v) // 5 - i // 5 - 1) + i % 5] for i in xrange(len(v))]

修改

如果你对这些划分和模数感到不舒服,那么没有任何数学计算(但可能效率较低)的替代方案是:

sum([v[i: i+5] for i in xrange(0, len(v), 5)][::-1], [])

答案 1 :(得分:0)

我不知道 pythonic 是怎样的,但它运作良好

for i in len(v)//2:
      v[i], v[-i] = v[-i], v[i]

答案 2 :(得分:0)

x

反转数组
>>> M = [[0,1,2],[3,4,5],[6,7,8],[9,10,11]]
>>> M[::-1]
[[9, 10, 11], [6, 7, 8], [3, 4, 5], [0, 1, 2]]

答案 3 :(得分:0)

使用list(reversed(x))x[::-1]之类的:

matrix=[[0,1,2,3,4],[5,6,7,8,9],[10,11,12,13,14],[15,16,17,18,19]]
backwards=matrix[::-1]
inverted=list(reversed(matrix))

reversed返回list转换为列表的向后迭代器,[::-1]返回一个列表拼接,将元素向后移动。

答案 4 :(得分:0)

当矩阵的形状为width, height = 5, 5时,从列表索引中获取自下而上索引的通用公式为:

width*(height-index//height-1)+index%height