如何将二维numpy数组的行分组相加形成另一个numpy数组?

vfh0ocws  于 2023-03-12  发布在  其他
关注(0)|答案(1)|浏览(147)

我有一个csv文件,导入到一个2D numpy数组中(它本来有浮点数和整数在单独的列中).我打算将数组的每组N行的值相加形成新数组的单行.我只能想到在嵌套循环中分别添加每行和列的值,那么有没有其他更好的numpy方法来做到这一点?这是我开始的,但似乎太笨拙了

def read_results(N, t_eval):
    solution_cells = pd.read_csv("battery_solution_6.csv").to_numpy() # This makes the array uniformly as float
    solution_battery = [None]
    for t in t_eval:
        solution_t = [None] # Sum of all cell results in one for particular t
        for i in range(N):
            solution_t += solution_cells[t*N+i,:] # Need to implement another layer of loop for summing each column value for each row
        solution_battery.append(solution_t)
# t*N+i to get a group of N rows together for the summing, appending to a final array for the summed results

基本上,我有这样的东西:

t i x y z
0 0 1 2 3
0 1 1 2 3
0 2 1 2 3
1 0 1 2 3
1 1 1 2 3
1 2 1 2 3
2 0 1 2 3
2 1 1 2 3
2 2 1 2 3
...

其中i is in range(N),因此需要将每组N行相加以得到电池。(当然,所有x、y、z值都不同)这需要“相加”以得到:

t x y z
0 3 6 9
1 3 6 9
2 3 6 9

其中不需要i,因为数据全部求和。

wqsoz72f

wqsoz72f1#

假设t列表示记录组:你可以很容易地处理Pandasdf.groupby,并对各组的值求和:

df = pd.read_csv("battery_solution_6.csv", sep='\s+')
res = df.drop(columns='i').groupby('t').sum().reset_index()
t  x  y  z
0  0  3  6  9
1  1  3  6  9
2  2  3  6  9

相关问题