Python:按列在矩阵中的集合的部分和

时间:2014-12-16 12:50:27

标签: python loops matrix cumsum

我有两个大矩阵(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()...

2 个答案:

答案 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]