Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.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 Sympy:获取矩阵幂的列_Python_Matrix_Sympy - Fatal编程技术网

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
对其进行计算。