

pythonで(5, 5)の以下のような配列Xがあります。（数値は適当です。）

[code]

    array([[59, 65, 57, 57, 62],
           [96, 81, 83, 83, 96],
           [53, 29, 30, 30, 53],
           [26,  0,  0,  0, 27],
           [20,  1,  5,  0, 19]], dtype=uint8)
    
    X.shape  >>>(5, 5)
    
[/code]

このような配列を4つ合わせてshape(5, 5, 4)の以下のような配列X2作成したいのですが方法が良くわかりません。

[code]

    array([[[59, 35, 26, 54],
            [65, 17, 22, 1],
            [12, 27, 47, 21],
            [14, 17, 37, 41],
            [11, 36, 42, 11]],
    　　　　　　　　・
    　　　　　　　　・
    　　　　　　　　・
            [[20, 25, 10, 3],
            [ 1,  15, 21, 42],
            [ 5,  25, 11, 3],
            [ 0,  4, 10, 23],
            [12, 14, 11, 32]]], dtype=uint8)
    
    X2.shape  >>>(5, 5, 4)
    
[/code]

どうしたらこのような処理ができるのか、どなたかご教授お願いします。

以上.

**追記**  
すみません。  
元の2次元配列をそのまま3次元配列に並べる処理で、shapeは(4,5,5)になる形の処理でも大丈夫です。shapeの順番は問いません。  
X2.shape >>>(4, 5, 5)


CC BY-SA 4.0
2020-06-23T06:59:16.433
67922
2020-06-24T08:41:43.910
2020-06-24T03:58:53.507
36620
36620
question
python numpy array
python numpy配列でshape(5, 5)の配列から、(5, 5, 4)配列を作る方法


出来るshapeが(4,5,5)で良いのなら、このページの記事が参考になるでしょう。  
[NumPy配列ndarrayを結合（concatenate, stack, blockなど）](https://note.nkmk.me/python-
numpy-concatenate-stack-block/)

`numpy`の`stack()`で一気に出来ます。  
`Xa`,`Xb`,`Xc`,`Xd`という4つの2次元配列があったとすると:

[code]

    X2 = np.stack([Xa, Xb, Xc, Xd], 0)
    
[/code]

1つづつあるいは複数同士を結合するなら`concatenate()`でしょうね。  
1つづつ増やす:

[code]

    X3 = np.stack([Xa, Xb], 0)
    X3 = np.concatenate([X3, [Xc]])
    X3 = np.concatenate([X3, [Xd]])
    
[/code]

2つの3次元配列を結合

[code]

    X4 = np.stack([Xa, Xb], 0)
    X5 = np.stack([Xc, Xd], 0)
    X4 = np.concatenate([X4, X5])
    
[/code]

続けるとこんな感じに

[code]

    import numpy as np
    
    Xa = np.array([
      [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]
    ], dtype=np.uint8)
    
    Xb = np.array([
      [51,52,53,54,55],
      [56,57,58,59,60],
      [61,62,63,64,65],
      [66,67,68,69,60],
      [71,72,73,74,75]
    ], dtype=np.uint8)
    
    Xc = np.array([
      [101,102,103,104,105],
      [106,107,108,109,110],
      [111,112,113,114,115],
      [116,117,118,119,120],
      [121,122,123,124,125]
    ], dtype=np.uint8)
    
    Xd = np.array([
      [151,152,153,154,155],
      [156,157,158,159,160],
      [161,162,163,164,165],
      [166,167,168,169,160],
      [171,172,173,174,175]
    ], dtype=np.uint8)
    
    X2 = np.stack([Xa, Xb, Xc, Xd], 0)
    X2.shape
    
    X3 = np.stack([Xa, Xb], 0)
    X3 = np.concatenate([X3, [Xc]])
    X3 = np.concatenate([X3, [Xd]])
    X3.shape
    
    X4 = np.stack([Xa, Xb], 0)
    X5 = np.stack([Xc, Xd], 0)
    X4 = np.concatenate([X4, X5])
    X4.shape
    
[/code]

* * *

ちなみに uint8
のデータ型とか4つをひとまとめにすることとかからすると、R,G,B,Aの4つのプレーン毎のデータを合わせてフルカラーデータを求める感じでしょうか。

そうすると当てはまるか(英語版はRGBの3つだけ)どうか不明ですが、こんな記事が参考になるかもしれません。  
[Combine 3 separate numpy arrays to an RGB image in
Python](https://stackoverflow.com/q/10443295/9014308)  
[Python, NumPyで画像処理（読み込み、演算、保存）](https://note.nkmk.me/python-numpy-image-
processing/)  
[NumPyでRGB画像の色チャンネルを分離して単色化、白黒化、色交換](https://note.nkmk.me/python-numpy-rgb-
image-split-color/) : 分離する逆の操作ですが  
[How to extract R,G,B values with numpy into seperate
arrays](https://stackoverflow.com/q/41500637/9014308) : こちらも逆方向かつRGB

OpenCVやPILにはそうした機能のメソッドがあるのかもしれません。


CC BY-SA 4.0
2020-06-24T04:25:08.417
67943
2020-06-24T08:41:43.910
2020-06-24T08:41:43.910
26370
26370
67922
answer