为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

跃然一笑 2021-06-11 18:22:42
我有一个图像,我根据它的像素强度从中创建了一个 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:不幸的是,我还不知道如何显示数据帧本身,而不仅仅是代码。打印功能不起作用。我希望这不会太麻烦。
查看完整描述

2 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

只需在底层 numpy 数组上使用卷积:


import scipy.ndimage

full_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]])


查看完整回答
反对 回复 2021-06-16
  • 2 回答
  • 0 关注
  • 464 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号