

`np.array` の要素 (数字) を `np.array` に置換する方法が思いつかず，悩んでいます。  
例えば以下のような例です。

実行前

[code]

    img = np.array([
      [0, 1, 2], 
      [2, 1, 1],
    ])
    
[/code]

この`img[h, w]`の値に対し，例えば値が

[code]

    img[h, w] == 0 のとき np.array([255, 0, 0])  
    img[h, w] == 1 のとき np.array([125, 125, 0])
    img[h, w] == 2 のとき np.array([0, 125, 125])
    
[/code]

に置換したいと考えています。つまり，上のimgに対しては

実行後

[code]

    img = np.array([ 
      [[255, 0, 0], [125, 125, 0], [0, 125, 125]],
      [[0, 125, 125], [125, 125, 0], [125, 125, 0]],
    ])
    
[/code]

に置換したいです。  
最初`np.where`が使えるかと思いましたが，`np.where(conditions, x, y)`の`x,
y`は数字でなければならず，配列はNGのようです。  
効率的な方法をよろしくお願いします。


CC BY-SA 4.0
2018-11-03T04:06:09.097
49922
2018-11-05T02:04:51.963
2018-11-03T06:12:27.527
2238
30821
question
python numpy
Numpy 配列の要素を配列に置換する方法


numpyの置換にはFancy Indexingを使うのが効率的です。  
参考 Python Data Science Handbook [Fancy
Indexing](https://jakevdp.github.io/PythonDataScienceHandbook/02.07-fancy-
indexing.html)

[code]

    import numpy as np
    
    img = np.array([
        [0, 1, 2], 
        [2, 1, 1],
    ])    
    ind = np.array([np.array([255, 0, 0]), np.array([125, 125, 0]), np.array([0, 125, 125])])
    ind[img]
    
[/code]


CC BY-SA 4.0
2018-11-04T12:11:25.873
49954
2018-11-05T02:04:51.963
2018-11-05T02:04:51.963
15171
15171
49922
answer