2024-09-27 23:20:15 发布
网友
在numpy中,使用.T属性获取ndarray的转置版本非常方便。然而,没有类似的方法来获得共轭转置。Numpy的matrix类有.H运算符,但没有ndarray。因为我喜欢可读的代码,而且我太懒了,不能总是编写.conj().T,所以我希望.H属性始终对我可用。如何添加此功能?是否可以添加它,以便在每次导入numpy时都可以无脑地使用它?
.T
ndarray
.H
.conj().T
(关于.I逆运算符,可能会有类似的问题。)
.I
可以对ndarray对象进行子类化,如下所示:
from numpy import ndarray class myarray(ndarray): @property def H(self): return self.conj().T
以便:
a = np.random.random((3, 3)).view(myarray) a.H
会给你想要的行为。
一般来说,这个问题的困难在于Numpy是一个C扩展,它不能被猴子修补……或者它可以吗?forbiddenfruit模块允许用户执行此操作,尽管感觉有点像玩刀具。
以下是我所做的:
安装非常简单的forbiddenfruit包
确定用户自定义目录:
import site print site.getusersitepackages()
在该目录中,编辑usercustomize.py以包括以下内容:
usercustomize.py
from forbiddenfruit import curse from numpy import ndarray from numpy.linalg import inv curse(ndarray,'H',property(fget=lambda A: A.conj().T)) curse(ndarray,'I',property(fget=lambda A: inv(A)))
测试它:
python -c python -c "import numpy as np; A = np.array([[1,1j]]); print A; print A.H"
结果:
[[ 1.+0.j 0.+1.j]] [[ 1.-0.j] [ 0.-1.j]]
可以对
ndarray
对象进行子类化,如下所示:以便:
会给你想要的行为。
一般来说,这个问题的困难在于Numpy是一个C扩展,它不能被猴子修补……或者它可以吗?forbiddenfruit模块允许用户执行此操作,尽管感觉有点像玩刀具。
以下是我所做的:
安装非常简单的forbiddenfruit包
确定用户自定义目录:
在该目录中,编辑
usercustomize.py
以包括以下内容:测试它:
结果:
相关问题 更多 >
编程相关推荐