簡體   English   中英

反轉索引行,python

[英]reversing rows for indexes, python

我的數據具有(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方式做到這一點? 否則,最有效的計算方法是什么?

我不確定是否“ 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], [])

我不知道這是pythonic ,但是效果很好

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

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

使用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]返回將元素向后傾斜的列表拼接。

當矩陣的形狀為width, height = 5, 5從列表索引中獲得自底向上索引的一般公式為:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM