49762


タイトルのような配列を作成したいのですが、効率の良いプログラムが思い浮かばないので  
質問させてください。  
作成したい配列は、例えば0行目は 0, 2, 4 列目、1行目は 1, 3, 4
列目成分に"1"を持ちそれ以外は"0"を持つといった配列をpythonのfor文を用いずに作成したいです。例で上げた行列は、

[code]

    array = [[1,0,1,0,1],
             [0,1,0,1,1]]
    
[/code]

といった行列です。各行でどの列成分に"1"を配置するかを指定する行×1の個数のサイズ  
（上の例で言えば 2×3 の行列）はすでにあるものとして、効率よく配列を作成する方法があれば  
教えていただきたいです。  
for文を使った場合のコードは以下のようになりました。

[code]

    import numpy as np
    list_1_index = np.array[[0,2,4],[1,3,4]]
    array_0_1 = np.zeros(2*5).reshape(2,5)
    for i in range(len(list_1_index)):
        array_0_1[i,list_1_index[i,:]] = 1
    
[/code]


CC BY-SA 4.0
2018-10-29T05:36:59.467
49755
2018-10-29T08:59:41.523
30268
question
python numpy
行ごとに異なるインデックスに” １ ”を持つ numpy 配列を作成するには


forループを使わないのであれば

[code]

    array_0_1 = np.zeros([2,5])
    array_0_1[[[0],[1]], list_1_index] = 1
    
[/code]

でどうでしょうか。

`[[0],[1]]` の部分も生成するようにする場合は

[code]

    import numpy as np
    list_1_index = np.array([[0,2,4],[1,3,4]])
    N,M = list_1_index.shape[0],list_1_index.max()+1
    array_0_1 = np.zeros([N,M])
    array_0_1[np.arange(N).reshape(N,1), list_1_index] = 1
    
[/code]

となりますかね。

> ループに比べてそんなにコードサイズ減ってない気がするけど・・


CC BY-SA 4.0
2018-10-29T08:59:41.523
49762
2018-10-29T08:59:41.523
24801
49755
answer