猿问

查找 DataFrame 中相邻元素(行和列)的均值

我有一个图像,我根据它的像素强度从中创建了一个 DataFrame。由此,我想创建一个网格,在该网格中找到该网格中每个正方形内的平均强度,由 2x2 像素表示。这样做是为了捕捉更大的强度区域,以便将它们与背景噪声区分开来。(我认为最好包含此内容以提供上下文。)

在 DataFrame 中,这将转化为从一组 2 个相邻的行和列中找到 4 个值的平均值。

因此,为了说明问题,假设我们有以下 DataFrame:

df=pd.DataFrame({'A':(np.linspace(1,4,num=4)),'B':(np.linspace(5,8,num=4)),'C':(np.linspace(9,12,num=4)), 'D':(np.linspace(13,16,num=4))})

由此,我们想要创建一个对应于每个正方形均值的 DataFrame。在这种情况下,它将对应于以下内容(例如,3 将是值为 (1,5,2,6) 的 2x2 平方的平均值,11.5 将是 (9, 13, 10, 14):

df_mean=DataFrame({'A':pd.Series([3,11.5]),'B':pd.Series([5.5,13.5])})

如果问题仍然不清楚,想象一下使用原始 DataFrame 并在中间绘制一条垂直线和一条水平线。这将因此产生 4 个盒子。在 4 个框中的每个框中,您会发现 4 个值。我想计算每个框的平均值并将其插入到由框的平均值组成的新 DataFrame 中。

PS:不幸的是,我还不知道如何显示数据帧本身,而不仅仅是代码。打印功能不起作用。我希望这不会太麻烦。


跃然一笑
浏览 465回答 2
2回答

茅侃侃

只需在底层 numpy 数组上使用卷积:import scipy.ndimagefull_conv = scipy.ndimage.filters.convolve(df.values, 0.25*np.ones((2,2)))strided_conv = full_conv[::2, ::2]结果:array([[ 3.5, 11.5],       [ 5.5, 13.5]])
随时随地看视频慕课网APP

相关分类

Python
我要回答