我的数据带有(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方式做到这一点?否则,实现它的计算效率最高的方法是什么?
答案 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