【发布时间】:2021-02-10 19:50:36
【问题描述】:
我最近遇到了一个与下面给出的非常相似的代码 sn-p:
def abc(a,b,c):
a1 = a[:, :1]
b1 = b[:1, :]
c1 = c[:1, :]
a2 = a1.conj().transpose()
b2 = c1.conj().transpose()
d = np.linalg.inv(np.sqrt(b1))
e = d @ a2 @ b @ b2 @ d
return e
a,b,c 是 numpy 数组。
我正在尝试了解 python 装饰器,并从 this question 中学到了一点。
但是我无法弄清楚变量e 是如何定义的。到底发生了什么?
我是 Python 的初学者。据我所知,装饰器包裹着一个函数,函数作为参数传递。但在这里,这些都是 numpy 数组。
任何解释变量 e 时到底发生了什么或在一行中有多个装饰器的特定索引的含义都会非常有帮助。
【问题讨论】:
-
@不是这里的装饰器。它是运算符 - 矩阵乘法docs.python.org/3/library/operator.html#operator.matmul -
哦,好吧。谢谢。是否等同于使用 np.matmul() ?还是只是推荐的语法?
-
另外,我应该只回答我自己的问题还是删除它,因为这是一个错误的问题?抱歉,堆栈溢出的新手。
-
是的,它就像 matmul。来自numpy documentation:
The matmul function implements the semantics of the @ operator introduced in Python 3.5 following PEP465.但就个人而言,我会使用np.matmul函数,因为它更清晰 -
非常感谢您的 cmets。这清除了一切。
标签: python python-3.x function decorator python-decorators