Python Sympy:获取矩阵幂的列
这似乎是一个简单的问题。我的代码是Python Sympy:获取矩阵幂的列,python,matrix,sympy,Python,Matrix,Sympy,这似乎是一个简单的问题。我的代码是 import sympy as sp D1 = sp.symbols('D1') D2 = sp.symbols('D2') m1 = sp.diag(*[2 * D1, 2 * D1, 2 * D2, 2 * D2]) b = sp.sqrt(m1) m1.col(0) b.col(0) 我想得到一列矩阵的平方根。但是,似乎MatPow对象b没有.col属性,而像m1这样的普通矩阵具有该属性 输出: AttributeError
import sympy as sp
D1 = sp.symbols('D1')
D2 = sp.symbols('D2')
m1 = sp.diag(*[2 * D1, 2 * D1, 2 * D2, 2 * D2])
b = sp.sqrt(m1)
m1.col(0)
b.col(0)
我想得到一列矩阵的平方根。但是,似乎MatPow
对象b
没有.col
属性,而像m1
这样的普通矩阵具有该属性
输出:
AttributeError Traceback (most recent call last)
<ipython-input-55-855c6e53a412> in <module>()
----> 1 b.col(0)
AttributeError: 'MatPow' object has no attribute 'col'
Matrix([[sqrt(2)*sqrt(D1)], [0], [0], [0]])
AttributeError回溯(最近一次调用)
在()
---->1 b.col(0)
AttributeError:“MatPow”对象没有属性“col”
我做错了什么?您需要使用
as_mutable
方法将MatPow
对象转换为MutableDenseMatrix
:
b_as_m = b.as_mutable()
print(b_as_m.col(0))
输出:
AttributeError Traceback (most recent call last)
<ipython-input-55-855c6e53a412> in <module>()
----> 1 b.col(0)
AttributeError: 'MatPow' object has no attribute 'col'
Matrix([[sqrt(2)*sqrt(D1)], [0], [0], [0]])
谢谢我认为这个答案是可以接受的,但你能解释一下为什么这不是自动完成的吗?@Dr_Zaszuś我想这是因为可能的优化。例如,如果您尝试计算
(m1**0.5)**2
sympy可以返回m1
,而不实际计算temp=m1**0.5
和result=temp**2
。这并不能解释为什么不能获取类似于矩阵的对象的列…@Dr_Zaszuś。类矩阵对象b
不是一个完全计算过的矩阵-它的列的值现在没有定义。只知道b=m1**0.5
。要知道这些值,您需要首先使用as_mutable
对其进行计算。