よちよちpython

独習 python/Qpython/Pydroid3/termux/Linux

【Numpy】np.tile()で市松模様を作る

今回も飽きずにNumpyで市松模様を作ります。

前々回前回より色の配列設置の方法をスッキリさせました。



手順の説明


  1. 全要素ゼロの3次元配列を作る
  2. 1の配列のにRGB色を2色ぶん設定する
  3. 2の配列を結合してブロック作成
  4. 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)

f:id:chayarokurokuro:20201229104629j:plain

# 色の確認
plt.imshow(np_3d_2)

f:id:chayarokurokuro:20201229104641j:plain

手順3. 配列の結合


# 横に連結
np_blc_1 = np.hstack([np_3d_1, np_3d_2])
plt.imshow(np_blc_1)

f:id:chayarokurokuro:20201229104555j:plain

# 左右入れ替え
np_blc_2 = np_blc_1[:,::-1,:]
plt.imshow(np_blc_2)

f:id:chayarokurokuro:20201229104541j:plain

# 縦に連結
np_blc = np.vstack([np_blc_1, np_blc_2])
plt.imshow(np_blc)

f:id:chayarokurokuro:20201229104520j:plain

手順4. 画像の拡大


上の画像をnp.tile()で拡大する。

# 繰り返し倍数
i = 12
# 繰り返し
np_img = np.tile(np_blc, (i, i, 1))
# 表示
plt.imshow(np_img)

f:id:chayarokurokuro:20201229104502j:plain



コードまとめ


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

f:id:chayarokurokuro:20201229104431j:plain



前2回に比べてだいぶんコードが簡潔になった。
以上です。