2
我想借此每2个元素的平均值在每列平均列子集的2D numpy的阵列中的所有列的
这里是为了方便阵列:
p = np.array([[1, 2, 3, 4, 5, 6],
[10, 12, 21, 12, 11, 51],
[743,123,1,42,12,9],
[51, 21, 31, 13, 12, 10],
[76, 12 , 11,88, 90, 12]])
我想让每两个连续元素的平均值为每列:
p[0][0:2].mean() # mean of first 2 elements of the 1st column
这是我已经实现了(感谢sirfz answer)做,虽然我想摆脱的for循环如果可能的话(全光照摹numpy的只),并取回一个numpy的阵列,而无需手动做到这一点:?
parr = p[-1,:];
for i in range(3-1):
tmp = p[i*2:i*2+2,:].mean(axis=0)
parr = np.vstack([parr, tmp])
parr = np.roll(parr, -1, axis = 0)
返回
array([[ 5.5, 7. , 12. , 8. , 8. , 28.5],
[ 397. , 72. , 16. , 27.5, 12. , 9.5],
[ 76. , 12. , 11. , 88. , 90. , 12. ]])
更新:我结束了编辑接受的答案,以适应取均值在更多的元素上。被接受的答案的问题是在奇数行或列的情况下单独的行或列。
ii = 2 # number of elements to average
if rows % 2 != 0:
rows -= 1
parr = p[:rows].reshape((np.int(rows/ii), ii, cols)).mean(axis=1)
parr = np.vstack([parr, p[-1]])
谢谢。你的答案可以帮助我摆脱一个循环,但我仍然需要循环遍历整个列。 (PS:你的答案翻转我的需求,但有帮助)。我也更新了这个问题。 – user10853
@ user10853结帐我的更新的解决方案,您的问题,希望这可以帮助 – sirfz
我结束编辑它轻微。我离开堆行(&列)到if语句的末尾,因为我正在处理更大的数组,并且需要更大的子集的意思。 顺便说一句,没有一个函数在numpy或pandas或其他模块中做类似的功能吗? – user10853