如何找到numpy数组每两行的平均值
How to find mean of each two rows of a numpy array
我有一个很大的 numpy 数组,想取每两行第二列的平均值并将数组另存为一个新数组。我想取每两行的平均值,即第 1 行和第 2 行的第二列的平均值。然后,第 3 行和第 4 行的第二列的平均值,依此类推。然后,我想将每两行合并为一行。这对行的第一列和第三列也相同。这是我的简化数组:
input= np.array ([[1., 2., 5.],
[1., 4., 5.],
[4., 10., 3.],
[4., 2., 3.],
[1., 0., 0.],
[1., 1., 0.]])
那么,我想得到:
output= np.array ([[1., 3., 5.],
[4., 6., 3.],
[1., 0.5, 0.]])
我尝试了以下方法,但根本没有成功:
output=np.array([])
for i in range (len(input)-1):
g=(input[i,1]+input[i+1,1])/2
output=np.append(g,output)
提前,我非常感谢任何帮助。
您可以重塑并找到均值,如下所示:
import numpy as np
ipt = np.array([[1., 2., 5.],
[1., 4., 5.],
[4., 10., 3.],
[4., 2., 3.],
[1., 0., 0.],
[1., 1., 0.]])
result = np.mean(ipt.reshape((3, 2, 3)), axis=1)
print(result)
输出
[[1. 3. 5. ]
[4. 6. 3. ]
[1. 0.5 0. ]]
附带说明一下,避免使用 input 作为变量名,因为它会遮盖内置输入。
使用输入形状
reshape
的更稳健的方法
i= np.array ([[1., 2., 5.],
[1., 4., 5.],
[4., 10., 3.],
[4., 2., 3.],
[1., 0., 0.],
[1., 1., 0.]])
i.reshape(-1, 2, i.shape[-1]).mean(1)
array([[1. , 3. , 5. ],
[4. , 6. , 3. ],
[1. , 0.5, 0. ]])
对于两行,我觉得更容易做到:
(arr[::2] + arr[1::2])/2
取偶数行(ipt[::2]
)、奇数行(ipt[1::2]
),相加除以2:
output = (ipt[::2] + ipt[1::2])/2
我有一个很大的 numpy 数组,想取每两行第二列的平均值并将数组另存为一个新数组。我想取每两行的平均值,即第 1 行和第 2 行的第二列的平均值。然后,第 3 行和第 4 行的第二列的平均值,依此类推。然后,我想将每两行合并为一行。这对行的第一列和第三列也相同。这是我的简化数组:
input= np.array ([[1., 2., 5.],
[1., 4., 5.],
[4., 10., 3.],
[4., 2., 3.],
[1., 0., 0.],
[1., 1., 0.]])
那么,我想得到:
output= np.array ([[1., 3., 5.],
[4., 6., 3.],
[1., 0.5, 0.]])
我尝试了以下方法,但根本没有成功:
output=np.array([])
for i in range (len(input)-1):
g=(input[i,1]+input[i+1,1])/2
output=np.append(g,output)
提前,我非常感谢任何帮助。
您可以重塑并找到均值,如下所示:
import numpy as np
ipt = np.array([[1., 2., 5.],
[1., 4., 5.],
[4., 10., 3.],
[4., 2., 3.],
[1., 0., 0.],
[1., 1., 0.]])
result = np.mean(ipt.reshape((3, 2, 3)), axis=1)
print(result)
输出
[[1. 3. 5. ]
[4. 6. 3. ]
[1. 0.5 0. ]]
附带说明一下,避免使用 input 作为变量名,因为它会遮盖内置输入。
使用输入形状
reshape
的更稳健的方法
i= np.array ([[1., 2., 5.],
[1., 4., 5.],
[4., 10., 3.],
[4., 2., 3.],
[1., 0., 0.],
[1., 1., 0.]])
i.reshape(-1, 2, i.shape[-1]).mean(1)
array([[1. , 3. , 5. ],
[4. , 6. , 3. ],
[1. , 0.5, 0. ]])
对于两行,我觉得更容易做到:
(arr[::2] + arr[1::2])/2
取偶数行(ipt[::2]
)、奇数行(ipt[1::2]
),相加除以2:
output = (ipt[::2] + ipt[1::2])/2