如何对每n个数组值求和并将结果放入新数组中?

时间:2019-07-17 14:41:49

标签: python arrays numpy

我有一个很长的数组编号列表,我想对其进行汇总并放入一个新数组中。例如数组:

[1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8]

将成为:

[6,15,16,6,15,x]

如果我要每3求和。

我不知道该怎么做。我认为可能的一个问题是我不知道我的数组的长度-如果有必要,我不介意丢失数据的底部位。

我尝试使用numpy.reshape函数没有成功:

x_ave = numpy.mean(x.reshape(-1,5), axis=1)

ret = umr_sum(arr, axis, dtype, out, keepdims)

我得到一个错误:

TypeError: cannot perform reduce with flexible type

3 个答案:

答案 0 :(得分:1)

首先将数组剪切为正确的长度,然后进行整形。

name        |    email      | number        | cod   | pref
-------------------------------------------------------------
maryann     |  m@gmail.com  | 123           | 1 | 22
            |  m1@gmail.com | 2104          | 12    | 
------------------------------------------------------------
john        |  j@gmail.com  | 2206          | 11    | 4
            |  j@gmail.com  | 2205          | 178   | 
            |  j@gmail.com  | 2309          | 199   | 
------------------------------------------------------------
petter      |  p@gmail.com  | 12            | 150   | 50
import numpy as np

N = 3
a = np.array([1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8])


# first cut it so that lenght of a % N is zero
rest = a.shape[0]%N
a = a[:-rest]


assert a.shape[0]%N == 0


# do the reshape
a_RS = a.reshape(-1,N)
print(a_RS)

然后您可以简单地将其添加:

>> [[1 2 3]
    [4 5 6]
    [7 8 1]
    [2 3 4]
    [5 6 7]]
print(np.sum(a_RS,axis=1))

答案 1 :(得分:0)

您可以使用列表理解来做到这一点:

ls = [1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8]
res = [sum(ls[i:i+3]) for i in range(0, len(ls), 3)]
[6, 15, 16, 9, 18, 8]

这将导致所有数字都包含在结果总和中。如果您不希望发生这种情况,则只需检查一下,然后将最后的和替换为您想要的任何值:

if (len(ls)%3) != 0:
    res[-1] = 'x' 
[6, 15, 16, 9, 18, 'x']

或将其完全删除:

if (len(ls)%3) != 0:
    res[:] = res[:-1] 
[6, 15, 16, 9, 18]

答案 2 :(得分:0)

为什么您不只是使用列表推导?例如

my_list = [1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8]
len_list = len(my_list) - len(my_list) % 3  # ignore end of list, s.t., only tuples of three are considered
[my_list[i] + my_list[i+1] + my_list[i+2] for i in range(0, len_list, 3)]