广告区

广告区


本站消息

站长简介/公众号

关注本站官方公众号:程序员总部,领取三大福利!
福利一:python和前端辅导
福利二:进程序员交流微信群,专属于程序员的圈子
福利三:领取全套零基础视频教程(python,java,前端,php)

  价值13000svip视频教程,python大神匠心打造,零基础python开发工程师视频教程全套,基础+进阶+项目实战,包含课件和源码

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

np.subtract.outer() 返回比我预期更多的维度

发布于2022-06-25 19:25     阅读(859)     评论(0)     点赞(16)     收藏(0)



我有一个按日期索引的数据框,它有四列,都是整数。

我的最终目标是制作另一个数据框,它也按日期索引,而不是有四列标量值,而是一个 4x4 数组,其中包含该日期四列值之间差异的所有组合。

           A   B    C   D
1/1/2013    7   -1  1   2

我想做一个看起来像这样的二维数组:

        A   B   C   D
        7   -1  1   2
A   7   0   8   6   5
B   -1  -8  0   -2  -3
C   1   -6  2   0   -1
D   2   -5  3   1   0

其中数据的值是列值之间差异的组合。

然后我会为原始数据框中的每个日期制作这个二维数组

我一直在尝试在没有严重循环和事情的情况下做到这一点'pythonically/panda-ly'。

我做了最简单的情况——原始数据框只有一行数据:

ddf is type <class 'pandas.core.frame.DataFrame'>, shape (1, 4)
            A  B  C  D
2013-01-02  7 -1  1  2

我把那个 ddf 喂给

def makeRelativeChangeDF(deltaDF):
    """return array wit all the combinations of differences between columns"""
    return np.subtract.outer(deltaDF, deltaDF)

这将返回:

rcdf is type <class 'pandas.core.frame.DataFrame'>, shape (1, 4)
[[[[ 0.  8.  6.  5.]]

  [[-8.  0. -2. -3.]]

  [[-6.  2.  0. -1.]]

  [[-5.  3.  1.  0.]]]]

不知道为什么这会给出奇怪的形状(1,4)。我期待(4,4)。看着 rcdf 的打印,我可以看到它被大量包裹在多个数组中。我想我错误地使用了外部函数。我想以正确的方式做到这一点,而不是使用丑陋的重塑技巧来提取(正确的)数据,但将其重新包装成正确的形状。


解决方案


.iloc[0]您可以通过选择第一行然后使用将 2D 输入数据帧转换为 1D 系列np.subtract.outer(),如下所示 -

np.subtract.outer(deltaDF.iloc[0],deltaDF.iloc[0])

看来您也可以使用broadcasting-

deltaDF.iloc[0][:,None] - deltaDF.iloc[0][None,:]

样品运行 -

In [107]: type(deltaDF)
Out[107]: pandas.core.frame.DataFrame

In [108]: np.subtract.outer(deltaDF.iloc[0],deltaDF.iloc[0])
Out[108]: 
array([[ 0,  8,  6,  5],
       [-8,  0, -2, -3],
       [-6,  2,  0, -1],
       [-5,  3,  1,  0]])

In [109]: deltaDF.iloc[0][:,None] - deltaDF.iloc[0][None,:]
Out[109]: 
array([[ 0,  8,  6,  5],
       [-8,  0, -2, -3],
       [-6,  2,  0, -1],
       [-5,  3,  1,  0]])






所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/1607333/893a344dfe22adcd7a98/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

16 0
收藏该文
已收藏

评论内容:(最多支持255个字符)