繁体   English   中英

Sympy 通过 function 定义矩阵:TypeError

[英]Sympy defining matrix by function: TypeError

我能够使用函数定义sympy矩阵。 对于特定的 function,我得到一个TypeError

sympy.Matrix(4, 4, lambda i,j: -1^(i-j) )

或者

def c(i,j):
    return -1^(i-j)
sympy.Matrix(4, 4, c)

错误是:


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-28-f922eb663788> in <module>
      2     return -1^(i-j)
      3 # sympy.Matrix(4, 4, c)
----> 4 sympy.Matrix(4, 4, lambda i,j: -1^(i-j) )

~/.local/lib/python3.8/site-packages/sympy/matrices/dense.py in __new__(cls, *args, **kwargs)
    297 
    298     def __new__(cls, *args, **kwargs):
--> 299         return cls._new(*args, **kwargs)
    300 
    301     @classmethod

~/.local/lib/python3.8/site-packages/sympy/matrices/dense.py in _new(cls, copy, *args, **kwargs)
    308             rows, cols, flat_list = args
    309         else:
--> 310             rows, cols, flat_list = cls._handle_creation_inputs(*args, **kwargs)
    311             flat_list = list(flat_list) # create a shallow copy
    312         self = object.__new__(cls)

~/.local/lib/python3.8/site-packages/sympy/matrices/matrices.py in _handle_creation_inputs(cls, *args, **kwargs)
   1100                 for i in range(rows):
   1101                     flat_list.extend(
-> 1102                         [cls._sympify(op(cls._sympify(i), cls._sympify(j)))
   1103                          for j in range(cols)])
   1104 

~/.local/lib/python3.8/site-packages/sympy/matrices/matrices.py in <listcomp>(.0)
   1100                 for i in range(rows):
   1101                     flat_list.extend(
-> 1102                         [cls._sympify(op(cls._sympify(i), cls._sympify(j)))
   1103                          for j in range(cols)])
   1104 

<ipython-input-28-f922eb663788> in <lambda>(i, j)
      2     return -1^(i-j)
      3 # sympy.Matrix(4, 4, c)
----> 4 sympy.Matrix(4, 4, lambda i,j: -1^(i-j) )

TypeError: unsupported operand type(s) for ^: 'int' and 'Zero'

从错误日志中,似乎ij被评估为intZero (可能在i == j时)。

如何正确 function 以确保ij始终评估为int

int强制转换ij的结果可以解决问题:

sympy.Matrix(4, 4, lambda i,j: -1^int(i-j) )

或者

def c(i,j):
    return -1^int(i-j)
sympy.Matrix(4, 4, c)

结果是:

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM