我应该定义一个新函数来制作厄米特矩阵吗?
Should I define a new function for making a matrix Hermitian?
设X
为方阵。我们想强制它是 Hermitian,即:自共轭转置。 X = X^H = conj(X^T)
。在 Python 和 numpy
中做到这一点很容易:
X = 0.5*(X + np.conj(X.T))
我还没有在 NumPy 中找到一个可以在单个表达式中完成它的函数 f(x)
。
问题是我应该定义一个新函数来做到这一点吗?例如
def make_hermitian(X):
return 0.5*(X + np.conj(X.T))
(可以想出简称,例如“make_h”或“herm”或“selfconj”)。
优点: 代码更具可读性,一次操作的形式更短。如果使用较短的名称,重复多次时可以省去书写,并且在这个操作中修改起来更加容易和舒适(只需要修改到位)。
缺点: 替换了一个不言自明的非常简短直接的表达式。
哪种编程方式更合适:定义一个新函数还是重复编写显式表达式?
我会说这取决于您需要重复使用该功能的次数。
如果超过两次,那肯定做一个函数。如果只有一两次,我会说这取决于你。如果您选择不使用任何功能,请添加一个简短的注释,说明这段代码应该做什么。
在任何情况下,我的偏好是定义一个具有有意义名称的函数,因为如果其他人打算/应该阅读代码,他们可能不知道或不记得如何实现厄米矩阵,因此仅靠数学是不够的。
另一方面,一个有意义的函数名会清楚地告诉他们它是怎么回事,他们可以google知道厄米矩阵是什么。
设X
为方阵。我们想强制它是 Hermitian,即:自共轭转置。 X = X^H = conj(X^T)
。在 Python 和 numpy
中做到这一点很容易:
X = 0.5*(X + np.conj(X.T))
我还没有在 NumPy 中找到一个可以在单个表达式中完成它的函数 f(x)
。
问题是我应该定义一个新函数来做到这一点吗?例如
def make_hermitian(X):
return 0.5*(X + np.conj(X.T))
(可以想出简称,例如“make_h”或“herm”或“selfconj”)。
优点: 代码更具可读性,一次操作的形式更短。如果使用较短的名称,重复多次时可以省去书写,并且在这个操作中修改起来更加容易和舒适(只需要修改到位)。
缺点: 替换了一个不言自明的非常简短直接的表达式。
哪种编程方式更合适:定义一个新函数还是重复编写显式表达式?
我会说这取决于您需要重复使用该功能的次数。
如果超过两次,那肯定做一个函数。如果只有一两次,我会说这取决于你。如果您选择不使用任何功能,请添加一个简短的注释,说明这段代码应该做什么。
在任何情况下,我的偏好是定义一个具有有意义名称的函数,因为如果其他人打算/应该阅读代码,他们可能不知道或不记得如何实现厄米矩阵,因此仅靠数学是不够的。
另一方面,一个有意义的函数名会清楚地告诉他们它是怎么回事,他们可以google知道厄米矩阵是什么。