我有两个大矩阵(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列具有正负元素的循环。我希望在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()...
答案 0 :(得分: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])
因此对于任何位置,我,在epeq_cr中你需要在cycle_starts和sum(epeq [:position])中找到小于i的最大数字。
答案 1 :(得分: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]