85663


以下のコードでforループを使わない方法を探しています。  
5つの2次元ndarrayの平均を求める際に、min-max rejectionを用いる処理です。

[code]

    stack = np.empty((0, 100, 100))
    stack = np.append(stack, data1[np.newaxis, :], axis=0)
    stack = np.append(stack, data2[np.newaxis, :], axis=0)
    stack = np.append(stack, data3[np.newaxis, :], axis=0)
    stack = np.append(stack, data4[np.newaxis, :], axis=0)
    stack = np.append(stack, data5[np.newaxis, :], axis=0)
    
    amax = np.argmax(stack, axis=0)
    amin = np.argmin(stack, axis=0)
    
    mask = np.zeros((5, 100, 100), dtype=bool)
    
    for j in range(100):
        for i in range(100):
            nmax = amax[j, i]
            nmin = amin[j, i]
            mask[nmax, j, i] = True
            mask[nmin, j, i] = True
    
    stack_tmp = np.ma.masked_array(stack, mask=mask)
    stack_minmax = np.ma.mean(stack_tmp, axis=0).data
    
[/code]


CC BY-SA 4.0
2022-01-12T22:17:27.140
85659
2022-01-13T05:11:49.740
2022-01-13T00:09:50.947
50865
50865
question
python numpy
ndarrayの処理でのforループを使わない方法


すでに答え出てそうだけど,  
`mask` と同じ内容のものは以下のようにできます

[code]

    is_min_or_max = (stack == np.min(stack, axis=0))|(stack == np.max(stack, axis=0))
    
    assert np.all(is_min_or_max == mask), '不一致'
    display(stack[is_min_or_max])
    
[/code]


CC BY-SA 4.0
2022-01-13T05:11:49.740
85663
2022-01-13T05:11:49.740
43025
85659
answer