前提・実現したいこと
以下を実現したいのですが、ループのネストをせずに実現することは可能でしょうか。
※目的は処理の高速化です。
numpyをうまく使えば高速に行えるのではないかと考えているのですが、
妙案が浮かばず。。。
お力をお貸しいただけないでしょうか。
- 増減する数の配列において「各インデックスの値」と「そのインデックス以降の値」を比較して、
各インデックスの値の状態を取得する。
得たい結果
各インデックスの値とそのインデックス以降の値を比較して、
- 10以上になった後、10以下になった場合、
または、10以下になった後、10以上になった場合、
または、どの条件にも該当しない場合:0
- 10以下に一度もなっていない状態で、20以上になった場合:1
- 10以上に一度もなっていない状態で、20以下がった場合:2
入力1
[10, 0, 20, 9, 9, 9, 0, 29]
出力1
[0, 1, 2, 1, 1, 1, 1, 0]
入力2
[25, 36, 14, 50, 0]
出力2
[0, 2, 1, 2, 0]
入力3
[25, 24, 24, 24, 24]
出力3
[0, 0, 0, 0, 0]
該当のソースコード
python3.6
1import numpy as np 2 3arr = np.array([25, 36, 14, 50, 0]) 4result = [0] * len(arr) 5for i, target in enumerate(arr) : 6 is_up = False 7 is_down = False 8 for i_inner in range(i+1, len(arr)) : 9 diff = arr[i_inner] - target 10 if diff <= -10 : 11 is_down = True 12 elif diff >= 10 : 13 is_up = True 14 if is_up and is_down : 15 break 16 elif is_down == False and diff >= 20 : 17 result[i] = 1 18 break 19 elif is_up == False and diff <= -20 : 20 result[i] = 2 21 break 22 23print(result) # [0, 1, 2, 1, 1, 1, 1, 0]
回答2件
あなたの回答
tips
プレビュー