首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SAGE中跨越两个numpy (向量定义函数)数组的错误

SAGE中跨越两个numpy (向量定义函数)数组的错误
EN

Stack Overflow用户
提问于 2014-12-28 16:56:23
回答 1查看 591关注 0票数 1

u=u(x),v=v(x)是SAGE中定义的两个向量函数,如下所示:

代码语言:javascript
复制
import numpy as np
x = var('x')
f,g = function('f',x), function('g',x)
f(x), g(x) = 2*x, sin(x)
u,v = np.array([f,g]),np.array([g,f])
c = np.cross(u,v)

当试图跨越u,v时,我得到了以下错误(这似乎很奇怪,因为np.dot(u,v)工作得很好)

错误:

代码语言:javascript
复制
sage: np.cross(u,v,axisa=0,axisb=0)
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-12-4f0f99d7c55e> in <module>()
----> 1 np.cross(u,v,axisa=Integer(0),axisb=Integer(0))

/usr/lib/sagemath/local/lib/python2.7/site-packages/numpy/core/numeric.py in cross(a, b, axisa, axisb, axisc, axis)
   1329         if (b.shape[0] == 2):
   1330             cp = a[0]*b[1] - a[1]*b[0]
-> 1331             if cp.ndim == 0:
   1332                 return cp
   1333             else:

/usr/lib/sagemath/local/lib/python2.7/site-packages/sage/structure/element.so in sage.structure.element.Element.__getattr__ (sage/structure/element.c:3846)()

AttributeError: 'sage.symbolic.expression.Expression' object has no attribute 'ndim'

更新(解决方案):在3D向量上使用SAGE的u.cross_product(v)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-28 18:44:32

由于ab的第1 dim是2,所以它是在计算。

代码语言:javascript
复制
cp = a[0]*b[1] - a[1]*b[0]

对于普通的numpy数组来说,这很好:

代码语言:javascript
复制
np.cross([1,2],[2,1])  # -3

因为

代码语言:javascript
复制
np.array([1,2])[0].ndim  # 0

我没有Sage,但是您的错误消息说数组的元素是sage.symbolic.expression.Expression对象。

我可以用dtype=object与其他数组重现您的错误。

代码语言:javascript
复制
In [79]: f=np.array((1,2),dtype='O')  # array([1, 2], dtype=object)
In [80]: g=np.array((2,1),dtype='O')

In [83]: np.cross(f,g)
...
-> 1501             if cp.ndim == 0:
   1502                 return cp
   1503             else:

AttributeError: 'int' object has no attribute 'ndim'

In [84]: np.dot(f,g)
Out[84]: 4

In [86]: f[0]
Out[86]: 1

In [87]: f[0].ndim
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-87-45759919b9dd> in <module>()
----> 1 f[0].ndim

AttributeError: 'int' object has no attribute 'ndim'

显然,当编写np.cross时,他们并不认为它会与对象数组一起使用。将产生此测试错误的代码:if cp.ndim == 0:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27678568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档