Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建numpy矩阵的逆矩阵和对角矩阵_Python_Numpy_Matrix - Fatal编程技术网

Python 创建numpy矩阵的逆矩阵和对角矩阵

Python 创建numpy矩阵的逆矩阵和对角矩阵,python,numpy,matrix,Python,Numpy,Matrix,我正在做numpy数组的逆运算 from numpy import mat from numpy import * from numpy import matrix from numpy import linalg d =array ([ (0, 1, 2, 3, 4), ( 5, 6, 7, 8, 9), (10, 11, 12, 13, 14)]) print d.T print d.I print d.diagonal

我正在做numpy数组的逆运算

from numpy import mat
from numpy import *
from numpy import matrix
from numpy import linalg
d =array ([  (0, 1,  2,  3,  4),
             ( 5,  6,  7,  8,  9),
             (10, 11, 12, 13, 14)])

print d.T
print d.I
print d.diagonal
#above line gives <built-in method diagonal of numpy.ndarray object at 0x7fdf40a263f0>
print numpy.linalg.inv(d)

有没有关于求逆和对角的建议?

如果您将
d
转换为
np.matrix
,您将得到这些方法,方法如下:

d = np.matrix(d)
然后:


将起作用。

A.diagonal
是一种numpy.ndarray方法,正如打印输出所示。因此,@Saullo Castro的解决方案也适用于numpy阵列,而无需转换为
np.matrix

import numpy as np
A = np.arange(25).reshape((5,5))
diag = A.diagonal()
# array([ 0,  6, 12, 18, 24])

Numpy数组没有计算矩阵逆的方法,但是您可以使用
Numpy.linalg.inv
轻松地进行计算,正如您已经根据代码示例进行了尝试一样。

我建议更改所有这些导入:

from numpy import mat
from numpy import *
from numpy import matrix
from numpy import linalg
只有一个:

import numpy as np
那你就可以了

d = np.array(...)
# d = np.arange(15).reshape(3,5)
M = np.matrix(d)  
M.I   # a matrix has an I property, but an array does not
d.diagonal()  # diagonal is a method, not a property
np.diagonal(d)  # diagonal is also a function
np.linalg.inv(d)
不起作用-它给出了一个反对数组不是正方形的错误。很明显,
M.I
返回的是一种不同的逆。请参阅我下面关于
pinv
的说明

numpy
(以及一般的Python)具有函数、方法和属性(属性)。区别清楚吗

许多numpy函数最终调用主数组对象的相应方法。通常这并不重要,只是为了方便打电话

矩阵是一个子类,它有许多自己的方法。例如,请注意

In [817]: M.diagonal()
Out[817]: matrix([[ 0,  6, 12]])

In [818]: d.diagonal()
Out[818]: array([ 0,  6, 12])
diagonal
返回了相同的数字,但对于
M
,它返回了同一类的对象,根据类的定义,该对象是2d

d.T
M.I
access
properties
。它们不需要方法所需要的
()
,但在许多方面它们是相同的
np.matrix
定义了
I
,但
np.array
没有定义

如果您习惯于在MATLAB中使用矩阵,那么
np.matrix
类可以简化转换。但是如果这是您第一次使用这样的数组,我建议您使用
np.array
np.matrix
类只会增加混乱


M.I
M.getI()
相同

它的代码是(使用
help(M.getI)
阅读它的文档)

这意味着
M.I
使用
pinv
而不是
inv
<代码>np.linalg.pinv(d)有效。

您看过和吗?
d = np.array(...)
# d = np.arange(15).reshape(3,5)
M = np.matrix(d)  
M.I   # a matrix has an I property, but an array does not
d.diagonal()  # diagonal is a method, not a property
np.diagonal(d)  # diagonal is also a function
In [817]: M.diagonal()
Out[817]: matrix([[ 0,  6, 12]])

In [818]: d.diagonal()
Out[818]: array([ 0,  6, 12])
def getI(self):
    M, N = self.shape
    if M == N:
        from numpy.dual import inv as func
    else:
        from numpy.dual import pinv as func
    return asmatrix(func(self))