二维数组的求和部分

2024-04-19 22:24:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个维度为array[x][9]的二维数组。因为它从一个不同长度的文件中读取。我想找到数组中每一列的总和,但是一次24列,然后将结果输入到一个新数组中;相当于sum(array2[0:24]),但是对于一个2d数组。是否有一个特殊的语法我只是不知道或我必须做它手动。我知道如果它是一个一维数组,我可以通过

for x in range(len(array)/24):
     total.append(sum(array2[x1:x24])) # so i get an array of the sums  

二维数组的等价物是什么,并逐列执行。我可以想象这样做:将每一列存储在各自独立的1d数组中,然后找到总和,或者一堆for和while循环。两者听起来都不那么优雅。你知道吗


Tags: 文件inforlen语法range数组手动
3条回答

听起来您可能正在处理时间序列数据,使用一个包含小时值的文件,您需要一个每日总和(因此是24)。熊猫图书馆将很好地做到这一点:

假设您的数据位于data.csv

import pandas
df = pandas.read_csv('data.csv')

如果其中一列是时间戳,则可以使用它,但如果只有原始数据,则可以创建时间索引:

df.index = pandas.date_range(pandas.datetime.today().date(), 
                             periods=df.shape[0], freq='H')

现在,每天对所有列进行求和非常容易:

daily = df.resample('D').apply(sum)

请试试这个:

x = len(a) # x is the length of a

step = 24

# get the number of iterations you need to do
n = int(math.ceil(float(x) / step))


new_a = [map(lambda k: sum(list(k)), zip(*a[i * step:(i + 1) * step])) 
         for i in range(0, n)]

如果x不是24的倍数,则new_a中的最后一行将具有剩余行的总和(其计数将小于24)。你知道吗

这还假设a中的值是数字,因此我没有进行任何转换。你知道吗

您可以使用zip来转置数组,并使用理解来分别对每列求和:

>>> array = [[1, 2, 3], [10, 20, 30], [100, 200, 300]]
>>> [sum(a) for a in zip(*array)]
[111, 222, 333]

相关问题 更多 >