numpy なので、x = axis0, y = axis1, z = axis2 と仮定して話を進めますね。
(3, 3, 3) の numpy 配列を +z (axis=2),+y (axis=1) 方向に順に結合していき、(3, 9, 9) の配列を作りたいと解釈したので、以下にサンプルコードを書きます。
意図と違ったらすいません。
サンプルコード
結合するブロックを作成する。
import numpy as np
stage1 = np.array([[[1,1,1],
[1,0,1],
[1,1,1]],
[[1,0,1],
[0,0,0],
[1,0,1]],
[[1,1,1],
[1,0,1],
[1,1,1]]])
empty = np.zeros([3,3,3])
print('stage1.shape', stage1.shape) # stage1.shape (3, 3, 3)
print('empty.shape', empty.shape) # empty.shape (3, 3, 3)
numpy.block(arrays) を使うと、複数の numpy 配列を並べて結合できます。
python
1block = np.block([[stage1, stage1, stage1],
2 [stage1, empty, stage1],
3 [stage1, stage1, stage1]])
4print(block.shape) # array.shape (3, 9, 9)
array
[[[1. 1. 1. 1. 1. 1. 1. 1. 1.]
[1. 0. 1. 1. 0. 1. 1. 0. 1.]
[1. 1. 1. 1. 1. 1. 1. 1. 1.]
[1. 1. 1. 0. 0. 0. 1. 1. 1.]
[1. 0. 1. 0. 0. 0. 1. 0. 1.]
[1. 1. 1. 0. 0. 0. 1. 1. 1.]
[1. 1. 1. 1. 1. 1. 1. 1. 1.]
[1. 0. 1. 1. 0. 1. 1. 0. 1.]
[1. 1. 1. 1. 1. 1. 1. 1. 1.]]
[[1. 0. 1. 1. 0. 1. 1. 0. 1.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[1. 0. 1. 1. 0. 1. 1. 0. 1.]
[1. 0. 1. 0. 0. 0. 1. 0. 1.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[1. 0. 1. 0. 0. 0. 1. 0. 1.]
[1. 0. 1. 1. 0. 1. 1. 0. 1.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[1. 0. 1. 1. 0. 1. 1. 0. 1.]]
[[1. 1. 1. 1. 1. 1. 1. 1. 1.]
[1. 0. 1. 1. 0. 1. 1. 0. 1.]
[1. 1. 1. 1. 1. 1. 1. 1. 1.]
[1. 1. 1. 0. 0. 0. 1. 1. 1.]
[1. 0. 1. 0. 0. 0. 1. 0. 1.]
[1. 1. 1. 0. 0. 0. 1. 1. 1.]
[1. 1. 1. 1. 1. 1. 1. 1. 1.]
[1. 0. 1. 1. 0. 1. 1. 0. 1.]
[1. 1. 1. 1. 1. 1. 1. 1. 1.]]]
numpy.block() の仕組み
説明の要約
arrays の最も内側のリストを axis=-1 で結合し、結合してできた配列のリストを axis=-2 で結合する。これを arrays の最も外側の要素に到達するまで繰り返す。
今回の例の場合、
arrays 引数の最も内側のリストは、次の3つになるので、これをそれぞれ axis=-1 方向に結合します。
[stage1, stage1, stage1]
[stage1, empty, stage1]
[stage1, stage1, stage1]
# axis=-1 つまり axis=2 方向に結合
row1 = np.concatenate([stage1, stage1, stage1], axis=-1)
row2 = np.concatenate([stage1, empty, stage1], axis=-1)
row3 = np.concatenate([stage1, stage1, stage1], axis=-1)
print('row1.shape', row1.shape) # row1.shape (3, 3, 9)
print('row2.shape', row2.shape) # row2.shape (3, 3, 9)
print('row3.shape', row3.shape) # row3.shape (3, 3, 9)
こうしてできた row1, row2, row3 を axis=-1 方向に結合します。
# axis=-2 つまり axis=1 方向に結合
array = np.concatenate([row1, row2, row3], axis=-2)
print('array.shape', array.shape) # array.shape (3, 9, 9)
これ以上結合する配列はないので、処理はストップします。