2017-05-04 7 views
0

こんにちは私は以下のように2つの配列を持っています。 1と0と1からなるpythonで特定のシーケンスを構築するnumpy

1)アレイは、アクティブ日と0が休日であることを意味します。

2)アレイ結果のアレイは、演算シーケンスは、1秒の位置に追従する必要がある、請求項1に記載の組み合わせ)& 2)する必要がある1

に比べて長さが小さい算術配列。換言すれば、私は、これがスライスにnumpy.insert使用して解決することができアレイ1

一つの方法と同じ位置に挿入された0でアレイ1の長さに拡張するアレイ2つのニーズ。しかし、長さが異なり、配列1が動的なので、これを達成するための効率的な方法が必要です。

おかげ

Final result

答えて

1

まま代替ワンライナーソリューション

セットアップ

binary = np.array([1, 1, 0, 1, 0, 1, 1, 0, 1, 0]) 
arithmetic = np.arange(1, 7) 

ソリューション

#find 1s from binary and set values from arithmetic 
binary[np.where(binary>0)] = arithmetic 

Out[400]: array([1, 2, 0, 3, 0, 4, 5, 0, 6, 0]) 
1

は正しい長さ(len(binary))の結果の配列を作成し、結果配列に割り当てるためのマスクとしてbinaryアレイを使用する、0で満たされました。 binaryマスクがbool dtypeであることを確認してください。

>>> binary = np.array([1, 1, 0, 1, 0, 1, 1, 0, 1, 0], dtype=bool) 
>>> arithmetic = np.arange(1, 7) 
>>> result = np.zeros(len(binary), dtype=arithmetic.dtype) 
>>> result[binary] = arithmetic 
>>> result 
array([1, 2, 0, 3, 0, 4, 5, 0, 6, 0]) 
0

別の方法は、バイナリ配列のコピーを作成し、arithmaticアレイ

seq = np.arange(1, len(bi_arr[bi_arr != 0])+1) 

final_result = bi_arr.copy() 

final_result[final_result != 0] = seq 

プリント(final_result)

array([1, 2, 0, 3, 0, 4, 5, 0, 6, 0]) 

二ARRによりすべての非ゼロ値を置換することであろうそのまま

関連する問題