-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

如您所见,三轴列具有正负元素循环。我希望在 triax 的每个周期开始时在 epeq 中累积和,并且该值在周期内保持不变,如下所示:

epeq_cr=
0
1
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 回答