当使用zeros((n,n))时,Sympy会出现“not all arguments converted during string formatting”错误。

3
我正在外部计算机上运行sympy,但当我执行简单的命令时:
M=sympy.zeros((2,2))

我收到了错误信息。
 Traceback (most recent call last):
  File "test.py", line 8, in <module>
    M=sp.zeros((2,2))
  File "/apps/brussel/magnycours/software/sympy/0.7.6-intel-2015a-Python-2.7.9/lib/python2.7/site-packages/sympy/matrices/dense.py", line 1229, in zeros
    return cls.zeros(r, c)
  File "/apps/brussel/magnycours/software/sympy/0.7.6-intel-2015a-Python-2.7.9/lib/python2.7/site-packages/sympy/matrices/dense.py", line 513, in zeros
    r = as_int(r)
  File "/apps/brussel/magnycours/software/sympy/0.7.6-intel-2015a-Python-2.7.9/lib/python2.7/site-packages/sympy/core/compatibility.py", line 389, in as_int
    raise ValueError('%s is not an integer' % n)
TypeError: not all arguments converted during string formatting

然而,在我的电脑上运行时没有问题。我该如何解决这个问题呢?

我的电脑上安装的版本是0.7.1.rc1,而集群上的版本是0.7.6。我应该要求他们安装(更旧的)版本还是有更简单的解决方法?


3
我猜测集群上的sympy.zeros函数有不同的参数。我会查看0.7.6版本的API文档来了解它应该接受什么参数。 - notbad.jpeg
你实际的错误是堆栈跟踪中显示的 ValueError。在构建其错误消息时,引发了 TypeError。可能是因为 n 是一个元组,但预期应该是一个整数。 - swenzel
谢谢,那是一个非常简单的解决方案,现在它可以无问题地工作了。两个版本之间的语法确实不同(在我看来相当愚蠢),新版本至少应该能够识别并通知当某人尝试旧语法而不是抛出晦涩的错误信息。 - Jonathan Lindgren
@JonathanLindgren 旧的 API 自 0.7.2 版本开始已被弃用,并在 0.7.6 版本中移除。您应该经常更新软件包或查看以前版本的发布说明。请参阅此链接 https://github.com/sympy/sympy/issues/6480。 - Sudhanshu Mishra
1个回答

0
如果你想要一个元素都是零的2x2矩阵,请尝试以下代码:
In [6]: zeros(2,2)
Out[6]: 
Matrix([
[0, 0],
[0, 0]])

或者

In [7]: zeros(2)
Out[7]: 
Matrix([
[0, 0],
[0, 0]])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接