【Numpy】np.tile()で市松模様を作る
今回も飽きずにNumpyで市松模様を作ります。
手順の説明
- 全要素ゼロの3次元配列を作る
- 1の配列のにRGB色を2色ぶん設定する
- 2の配列を結合してブロック作成
- 3をnp.tile()で拡大
手順1. 基本となる三次元配列の生成
import numpy as np import matplotlib.pyplot as plt # 単色の一辺サイズ p=5 # 基本配列 np_3d = np.zeros(p*p*3, dtype=int).reshape(p,p,3) # 表示(省略 #np_3d
手順2. RGB色の設定
- 若苗色 RGB(231,232,103)
- 女郎花 RGB(242,242,176)
この2色を使います。
# 若苗色 RGB(231,232,103) np_3d_1 = np_3d.copy() np_3d_1[:, :, :] = (231,232,103) # 表示(省略 #np_3d_1
# 女郎花 RGB(242,242,176) np_3d_2 = np_3d.copy() np_3d_2[:, :, :] = (242,242,176) # 表示(省略 #np_3d_2
# 色の確認
plt.imshow(np_3d_1)
# 色の確認
plt.imshow(np_3d_2)
手順3. 配列の結合
# 横に連結
np_blc_1 = np.hstack([np_3d_1, np_3d_2])
plt.imshow(np_blc_1)
# 左右入れ替え np_blc_2 = np_blc_1[:,::-1,:] plt.imshow(np_blc_2)
# 縦に連結
np_blc = np.vstack([np_blc_1, np_blc_2])
plt.imshow(np_blc)
手順4. 画像の拡大
上の画像をnp.tile()
で拡大する。
# 繰り返し倍数 i = 12 # 繰り返し np_img = np.tile(np_blc, (i, i, 1)) # 表示 plt.imshow(np_img)
コードまとめ
import numpy as np import matplotlib.pyplot as plt ### 設定 サイズ(p*2*i)の画像ができる### # 単色の一辺サイズ p=25 # ブロック繰り返し倍数 i = 3 # 基本配列 np_3d = np.zeros(p*p*3, dtype=int).reshape(p,p,3) # 若苗色 RGB(231,232,103) np_3d_1 = np_3d.copy() np_3d_1[:, :, :] = (231,232,103) # 女郎花 RGB(242,242,176) np_3d_2 = np_3d.copy() np_3d_2[:, :, :] = (242,242,176) # 横に連結 np_blc_1 = np.hstack([np_3d_1, np_3d_2]) # 連結の左右入れ替え np_blc_2 = np_blc_1[:,::-1,:] # 縦に連結 np_blc = np.vstack([np_blc_1, np_blc_2]) # 繰り返し(完成) np_img = np.tile(np_blc, (i, i, 1)) # 表示 plt.imshow(np_img) # 画像保存 plt.axis("off") plt.savefig("若苗ー女郎花.jpg")
前2回に比べてだいぶんコードが簡潔になった。
以上です。