我有一个很长的数组编号列表,我想对其进行汇总并放入一个新数组中。例如数组:
[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
答案 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)]