【问题标题】:TypeError("Data type not understood") when trying to create a matrix尝试创建矩阵时的 TypeError(“数据类型不理解”)
【发布时间】:2016-03-01 19:59:42
【问题描述】:

我正在尝试使用 sympy 来区分一组方程,我必须使用我计算的导数创建一个 2x2 矩阵。这是我的代码:

#import numpy as np
from numpy import *
from scipy import *
from sympy import *

x1 = 3; x2 = 0; x3 = 0; x4 = 3
y1 = 3; y2 = 3; y3 = 0; y4 = 0

s = Symbol('s')
t = Symbol('t')

N1 = (s+1)*(t+1)/4
N2 = (1-s)*(t+1)/4
N3 = (1-s)*(1-t)/4
N4 = (s+1)*(1-t)/4

x = (x1*N1)+(x2*N2)+(x3*N3)+(x4*N4)
y = (y1*N1)+(y2*N2)+(y3*N3)+(y4*N4)

dxs = diff(x, s)
dxt = diff(x, t)
dys = diff(y, s)
dyt = diff(y, t)

#print type(dxs).__name__

print dxs, dxt, dys, dyt

J = Matrix([dxs, dys], [dxt, dyt])
#J = np.matrix((dxs, dys), (dxt, dyt))
print J

但是,我收到“未找到数据类型”错误。所以,我尝试使用 type() 函数来打印我最终得到的导数的数据类型。我有两种不同的类型。当最终导数只是数字时,type() 返回“Rational”。当最终导数中包含变量“s”或“t”时,它返回“添加”(这可以通过为 x2、x3、y3 和 y4 提供非零值来完成)。如果有人可以帮助我创建这个矩阵,我将非常感激。我也尝试过使用

J = Matrix[[dxs, dys], [dxt, dyt]]

而不是

J = Matrix((dxs, dys), (dxt, dyt))

现在我得到“类型”对象没有属性'__getitem__' 错误。我对python很陌生,我已经尽我所能在网上找到解决方案,但我失败了。感谢您的帮助。

【问题讨论】:

    标签: python numpy matrix scipy sympy


    【解决方案1】:

    您应该执行J = Matrix(((dxs, dys), (dxt, dyt)))(或Matrix([[dxs, dys], [dxt, dyt]])Matrix([(dxs, dys), (dxt, dyt)]) 等)之类的操作。您正在做的是向 Matrix 构造函数传递两个元组,而您需要向它传递一个元组的单个元组(或列表列表或元组列表等)。所以换句话说,一个二维数据结构而不是两个一维数据结构。

    另外,不要使用from foo import *。尤其是使用 numpy 和 sympy 时,这会导致冲突(例如,两者都提供了 diff 函数)。

    【讨论】:

      【解决方案2】:

      找到了解决办法。很抱歉浪费了任何人的时间。我在定义矩阵时使用了错误的语法。而不是

      J = Matrix([dxs, dys], [dxt, dyt])
      

      我应该用过

      J = Matrix([[dxs, dys], [dxt, dyt]])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-29
        • 2020-03-27
        • 2020-06-16
        • 2018-05-24
        • 2021-06-11
        • 2020-03-25
        • 2021-07-17
        • 1970-01-01
        相关资源
        最近更新 更多