zoukankan      html  css  js  c++  java
  • python@与@=的用法

    最近在阅读一篇paper给出的代码时遇到了这样一行

    h_ij0 = z_ij @ rel_var
    

    这让我很费解,因为之前从来就没有遇到过@作为运算符进行二元运算的情况。之前遇到的@都是作为装饰器的标志符号(有关python装饰器的讲解已经烂大街了,有兴趣的可以直接去搜索),今天我们就来探究一下python中@作为二元运算符的作用。

    当然,直接搜百度,搜bing甚至搜StackOverflow都没有找到想要的答案,全是一堆讲python装饰器的。我甚至开始怀疑paper贴的代码是错的,但是它的确可以运行。当我查阅python的官方文档时,我找到了一些线索:

    从上图我们可以看出,python官方文档将@运算符分为了OperatorsDelimiters说明@确实可以参与二元运算的,于是我回到paper给的代码中去,分别查看参与运算的两个参数类型和shape,输出如下:

    z_ij: torch.Size([200, 2]) 
    rel_var: torch.Size([2, 300])
    h_ij0: torch.Size([200,300])
    

    看到这里大家应该能猜出来了,@执行的是矩阵乘法,让我们来做个实验。

    import numpy as np
    a = np.ones((2, 3))
    b = np.ones((3, 2))
    print(a @ b)
    # 输出 [[3. 3.]
    #       [3. 3.]]
    

    说明我们猜想正确,以上。

  • 相关阅读:
    c++ 优化的动态数组 Vector
    C++ 重载赋值运算符
    k8s中引入外部服务
    MySQL----mysql_secure_installation 安全配置向导
    elk参考连接
    限制不同的用户操作k8s的资源
    tcpdump 抓包命令使用教程
    日志管理——rsyslog、logrotate
    lsyncd配置文件详细说明
    Systemd 服务配置文件(转载)
  • 原文地址:https://www.cnblogs.com/1623-1017/p/12118840.html
Copyright © 2011-2022 走看看