-2

次のような列を持つ 2 つの大きな行列 (1800L;1800C)、epeq と triax があります。

epeq=
0
1
1
2
1
0
3
3
1
1
0
2
1
1
1

トライアックス=
-1
1
3
1
-2
-3
-1
1
2
3
2
1
-1
-3
-1
1

ご覧のとおり、トライアックス カラムには正と負の要素のサイクルがあります。トライアックスの各サイクルの開始時に epeq の累積合計が必要であり、この値は次のようにサイクル中に一定に保たれます。

epeq_cr =
0
1
1
1
1
1
11
11
11
11
11
11
11
11
17

この手順を epeq 行列のすべての列に適用します。私はそのコードを持っていますが、何かが欠けています。

epeq_cr = np.copy(epeq)
for g in range(1,len(epeq_cr)):
    for h in range(len(epeq_cr[g])):
        if (triax[g-1][h]<0 and triax[g][h]>0):
            epeq_cr[g][h] = np.cumsum()...
4

2 に答える 2

0
epeq_cr = np.copy(epeq)                                         
for g in range(1,len(epeq_cr)):
    for h in range(len(epeq_cr[g])):
        if (triax[g-1][h]<=0 and triax[g][h]>=0):
            epeq_cr[g][h]=sum(epeq[v][h] for v in range(g+1))
        else:
            epeq_cr[g][h]=epeq_cr[g-1][h]
于 2014-12-17T10:14:38.547 に答える
0

これを見る時間はありませんが、トライアックスのどこからサイクルが始まるかを理解することから始めます。

epeq = np.array([1, 1, 2, 1, 0, 3, 3, 1, 1, 0, 2, 1, 1, 1])
triax = np.array([-1, 1, 3, 1, -2, -3, -1, 1, 2, 3, 2, 1, -1, -3, -1, 1])

t_shift = np.roll(triax, 1)
t_shift[0] = 0
cycle_starts = np.argwhere((triax > 0) & (t_shift < 0)).flatten()
array([ 1,  7, 15])

したがって、任意の位置 i について、epeq_cr で、cycle_starts と sum(epeq[:position]) で i より小さい最大数を見つける必要があります。

于 2014-12-16T13:58:16.530 に答える