2016-10-26 1 views
0

左上隅に原点となる(x、y)座標のデータがあります。例えばインデックスの行を逆にする、

| 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しかし、私はそれをしたい:私はそのように見えます0から始まるインデックスを持つ行列に変身します左下に原点があるので、次のようなインデックスを持つ行列を得ることができます。

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

したがって、基本的に行を逆にします。それをパイソン様式で行う方法はありますか?そうでなければ達成する最も計算効率の良い方法は何でしょうか?

答えて

0

for i in len(v)//2: 
     v[i], v[-i] = v[-i], v[i] 
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]] 
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]は、リストスプライスを返して、要素を後方に返します。

1

私は「Python的」かどうかが、私に最も直接的かつ効率的な方法は、単にあるかどうかわからないです:

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

EDIT:

あなたが不快に感じる場合これらの除算とモジュロについては、数学計算を行わない(ただし、効率が低下する可能性があります)代替方法は次のとおりです。

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

0

あなたのマトリックスの形状がwidth, height = 5, 5ある場合は、リストのインデックスからボトムアップのインデックスを取得するための一般式は次のとおりです。

width*(height-index//height-1)+index%height 
関連する問題