numpy中的共轭转置算子“.H”

2024-09-27 23:20:15 发布

您现在位置:Python中文网/ 问答频道 /正文

在numpy中,使用.T属性获取ndarray的转置版本非常方便。然而,没有类似的方法来获得共轭转置。Numpy的matrix类有.H运算符,但没有ndarray。因为我喜欢可读的代码,而且我太懒了,不能总是编写.conj().T,所以我希望.H属性始终对我可用。如何添加此功能?是否可以添加它,以便在每次导入numpy时都可以无脑地使用它?

(关于.I逆运算符,可能会有类似的问题。)


Tags: 方法代码功能版本numpy属性运算符matrix
2条回答

可以对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模块允许用户执行此操作,尽管感觉有点像玩刀具。

以下是我所做的:

  1. 安装非常简单的forbiddenfruit

  2. 确定用户自定义目录:

    import site
    print site.getusersitepackages()
    
  3. 在该目录中,编辑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)))
    
  4. 测试它:

    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]]
    

相关问题 更多 >

    热门问题