2次元アレイ(numpy.ndarray)を時計回り/反時計回りに回転

ちょっとした頭の体操みたいな話.2次元アレイ(2d numpy.ndarray)を時計回り/反時計回りにしたい場合,少し並び替えて軸を反転させれば良い.例えば,5×5の2次元アレイについて,時計回り/反時計回りを考えると,

import numpy as np


a = np.arange(25).reshape(5, -1)
print(a, end='\n\n')

print('時計回り(Clockwise)')
print(a[::-1].T, end='\n\n')

print('反時計回り(Anti-clockwise)')
print(a[:,::-1].T, end='\n\n')
[[ 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]]

時計回り(Clockwise)
[[20 15 10  5  0]
 [21 16 11  6  1]
 [22 17 12  7  2]
 [23 18 13  8  3]
 [24 19 14  9  4]]

反時計回り(Anti-clockwise)
[[ 4  9 14 19 24]
 [ 3  8 13 18 23]
 [ 2  7 12 17 22]
 [ 1  6 11 16 21]
 [ 0  5 10 15 20]]

2次元アレイ内のサブアレイを回転させる場合も同様で,例えば6×6の2次元アレイについて,3×3の4つのサブアレイについて回転させる場合,2×2の9つのサブアレイについて回転させる場合を考えると,

b = np.arange(36).reshape(6, -1)
print(b, end='\n\n')

print('時計回り(Clockwise)')
print(b.reshape(2, 3, 2, 3)[:, ::-1].swapaxes(1, 3).reshape(b.shape), end='\n\n')

print('反時計回り(Anti-clockwise)')
print(b.reshape(2, 3, 2, 3)[..., ::-1].swapaxes(1, 3).reshape(b.shape), end='\n\n')

print('時計回り(Clockwise)')
print(b.reshape(3, 2, 3, 2)[:, ::-1].swapaxes(1, 3).reshape(b.shape), end='\n\n')

print('反時計回り(Anti-clockwise)')
print(b.reshape(3, 2, 3, 2)[..., ::-1].swapaxes(1, 3).reshape(b.shape), end='\n\n')
[[ 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 25 26 27 28 29]
 [30 31 32 33 34 35]]

時計回り(Clockwise)
[[12  6  0 15  9  3]
 [13  7  1 16 10  4]
 [14  8  2 17 11  5]
 [30 24 18 33 27 21]
 [31 25 19 34 28 22]
 [32 26 20 35 29 23]]

反時計回り(Anti-clockwise)
[[ 2  8 14  5 11 17]
 [ 1  7 13  4 10 16]
 [ 0  6 12  3  9 15]
 [20 26 32 23 29 35]
 [19 25 31 22 28 34]
 [18 24 30 21 27 33]]

時計回り(Clockwise)
[[ 6  0  8  2 10  4]
 [ 7  1  9  3 11  5]
 [18 12 20 14 22 16]
 [19 13 21 15 23 17]
 [30 24 32 26 34 28]
 [31 25 33 27 35 29]]

反時計回り(Anti-clockwise)
[[ 1  7  3  9  5 11]
 [ 0  6  2  8  4 10]
 [13 19 15 21 17 23]
 [12 18 14 20 16 22]
 [25 31 27 33 29 35]
 [24 30 26 32 28 34]]
広告
カテゴリー: 未分類 パーマリンク

2次元アレイ(numpy.ndarray)を時計回り/反時計回りに回転 への1件のフィードバック

  1. ピンバック: 2次元配列の要素を蛇の様になぞってフラット化 | 粉末@それは風のように (日記)

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください