Python ';浮动';对象没有属性';罪恶';

Python ';浮动';对象没有属性';罪恶';,python,numpy,scipy,sympy,Python,Numpy,Scipy,Sympy,当我去打印我的矩阵时,它会打印一个错误,说“Float”对象没有属性“sin” 在用Python编写代码时,我试图使用sym.matrix以符号形式打印矩阵,但我以数字形式定义矩阵。当我去打印我的矩阵时,它会打印一个错误,说“Float”对象没有属性“sin”。似乎出于某种原因,我的sin函数没有被正确读取或输出 import numpy as np from scipy.integrate import quad from numpy import sin, cos, pi N = 5

当我去打印我的矩阵时,它会打印一个错误,说“Float”对象没有属性“sin”

在用Python编写代码时,我试图使用sym.matrix以符号形式打印矩阵,但我以数字形式定义矩阵。当我去打印我的矩阵时,它会打印一个错误,说“Float”对象没有属性“sin”。似乎出于某种原因,我的sin函数没有被正确读取或输出


import numpy as np
from scipy.integrate import quad
from numpy import sin, cos, pi

N = 5 

L = 1

r_e = 1.4

mu = 916

def Phi_V(x,n,r):
    return (2/L)**(1/2) * sin(n*np.pi*x/L +n*np.pi/2) * 4.7 * (1-np.exp(-x))**2 * (2/L)**(1/2) * sin(r*np.pi*x/L +r*np.pi/2)
def V_Func(n,r,j):
    return quad(Phi_V, -L/2, L/2, args = (n,r))[0] + (j*j+1)/(2*mu*r_e**2)

V = sym.Matrix(N,N, lambda n,r: V_Func(n + 1 ,r + 1,10))

V

我收到以下错误消息:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-38-8624393320b4> in <module>()
     16     return quad(Phi_V, -L/2, L/2, args = (n,r))[0] + (j*j+1)/(2*mu*r_e**2)
     17 
---> 18 V = sym.Matrix(N,N, lambda n,r: V_Func(n + 1 ,r + 1,10))
     19 
     20 V

/anaconda3/lib/python3.7/site-packages/sympy/matrices/dense.py in __new__(cls, *args, **kwargs)
    418 class MutableDenseMatrix(DenseMatrix, MatrixBase):
    419     def __new__(cls, *args, **kwargs):
--> 420         return cls._new(*args, **kwargs)
    421 
    422     @classmethod

/anaconda3/lib/python3.7/site-packages/sympy/matrices/dense.py in _new(cls, *args, **kwargs)
    430             rows, cols, flat_list = args
    431         else:
--> 432             rows, cols, flat_list = cls._handle_creation_inputs(*args, **kwargs)
    433             flat_list = list(flat_list) # create a shallow copy
    434         self = object.__new__(cls)

/anaconda3/lib/python3.7/site-packages/sympy/matrices/matrices.py in _handle_creation_inputs(cls, *args, **kwargs)
   2111                     flat_list.extend(
   2112                         [cls._sympify(op(cls._sympify(i), cls._sympify(j)))
-> 2113                          for j in range(cols)])
   2114 
   2115             # Matrix(2, 2, [1, 2, 3, 4])

/anaconda3/lib/python3.7/site-packages/sympy/matrices/matrices.py in <listcomp>(.0)
   2111                     flat_list.extend(
   2112                         [cls._sympify(op(cls._sympify(i), cls._sympify(j)))
-> 2113                          for j in range(cols)])
   2114 
   2115             # Matrix(2, 2, [1, 2, 3, 4])

<ipython-input-38-8624393320b4> in <lambda>(n, r)
     16     return quad(Phi_V, -L/2, L/2, args = (n,r))[0] + (j*j+1)/(2*mu*r_e**2)
     17 
---> 18 V = sym.Matrix(N,N, lambda n,r: V_Func(n + 1 ,r + 1,10))
     19 
     20 V

<ipython-input-38-8624393320b4> in V_Func(n, r, j)
     14     return (2/L)**(1/2) * sin(n*np.pi*x/L +n*np.pi/2) * 4.7 * (1-np.exp(-x))**2 * (2/L)**(1/2) * sin(r*np.pi*x/L +r*np.pi/2)
     15 def V_Func(n,r,j):
---> 16     return quad(Phi_V, -L/2, L/2, args = (n,r))[0] + (j*j+1)/(2*mu*r_e**2)
     17 
     18 V = sym.Matrix(N,N, lambda n,r: V_Func(n + 1 ,r + 1,10))

/anaconda3/lib/python3.7/site-packages/scipy/integrate/quadpack.py in quad(func, a, b, args, full_output, epsabs, epsrel, limit, points, weight, wvar, wopts, maxp1, limlst)
    339     if weight is None:
    340         retval = _quad(func, a, b, args, full_output, epsabs, epsrel, limit,
--> 341                        points)
    342     else:
    343         retval = _quad_weight(func, a, b, args, full_output, epsabs, epsrel,

/anaconda3/lib/python3.7/site-packages/scipy/integrate/quadpack.py in _quad(func, a, b, args, full_output, epsabs, epsrel, limit, points)
    446     if points is None:
    447         if infbounds == 0:
--> 448             return _quadpack._qagse(func,a,b,args,full_output,epsabs,epsrel,limit)
    449         else:
    450             return _quadpack._qagie(func,bound,infbounds,args,full_output,epsabs,epsrel,limit)

<ipython-input-38-8624393320b4> in Phi_V(x, n, r)
     12 
     13 def Phi_V(x,n,r):
---> 14     return (2/L)**(1/2) * sin(n*np.pi*x/L +n*np.pi/2) * 4.7 * (1-np.exp(-x))**2 * (2/L)**(1/2) * sin(r*np.pi*x/L +r*np.pi/2)
     15 def V_Func(n,r,j):
     16     return quad(Phi_V, -L/2, L/2, args = (n,r))[0] + (j*j+1)/(2*mu*r_e**2)

AttributeError: 'Float' object has no attribute 'sin'

---------------------------------------------------------------------------
AttributeError回溯(最近一次呼叫上次)
在()
16返回四元组(Phi_V,-L/2,L/2,args=(n,r))[0]+(j*j+1)/(2*mu*r_e**2)
17
--->18V=对称矩阵(N,N,λN,r:V_Func(N+1,r+1,10))
19
20伏
/anaconda3/lib/python3.7/site-packages/sympy/matrix/densite.py in_uuuuuuunew_uuuuuuu(cls,*args,**kwargs)
418类可变DensMatrix(DensMatrix,MatrixBase):
419定义新(cls,*ARG,**kwargs):
-->420返回cls.\u新(*参数,**kwargs)
421
422@classmethod
/anaconda3/lib/python3.7/site-packages/sympy/matrix/dense.py in_new(cls,*args,**kwargs)
430行,列,平面列表=args
431其他:
-->432行,列,平面列表=cls。\句柄\创建\输入(*args,**kwargs)
433平面列表=列表(平面列表)#创建一个浅层副本
434 self=object.\uuuu new\uuuu(cls)
/anaconda3/lib/python3.7/site-packages/sympy/matrices/matrices.py输入(cls、*args、**kwargs)
2111平面列表。扩展(
2112[cls.\U sympify(op(cls.\U sympify(i),cls.\U sympify(j)))
->2113适用于范围内的j(cols)])
2114
2115#矩阵(2,2,[1,2,3,4])
/anaconda3/lib/python3.7/site-packages/sympy/matrices/matrices.py in(.0)
2111平面列表。扩展(
2112[cls.\U sympify(op(cls.\U sympify(i),cls.\U sympify(j)))
->2113适用于范围内的j(cols)])
2114
2115#矩阵(2,2,[1,2,3,4])
in(n,r)
16返回四元组(Phi_V,-L/2,L/2,args=(n,r))[0]+(j*j+1)/(2*mu*r_e**2)
17
--->18V=对称矩阵(N,N,λN,r:V_Func(N+1,r+1,10))
19
20伏
在V_Func(n,r,j)中
14返回(2/L)**(1/2)*sin(n*np.pi*x/L+n*np.pi/2)*4.7*(1-np.exp(-x))**2*(2/L)**(1/2)*sin(r*np.pi*x/L+r*np.pi/2)
15 def V_Func(n,r,j):
--->16返回四元组(Phi_V,-L/2,L/2,args=(n,r))[0]+(j*j+1)/(2*mu*r_e**2)
17
18V=对称矩阵(N,N,λN,r:V_Func(N+1,r+1,10))
/四元组中的anaconda3/lib/python3.7/site-packages/scipy/integrate/quadpack.py(func、a、b、args、full_输出、epsabs、epsrel、limit、points、weight、wvar、wopts、maxp1、limlst)
339如果重量为零:
340 retval=_四元组(func、a、b、参数、全输出、epsabs、epsrel、limit、,
-->(341分)
342其他:
343 retval=_quad_weight(函数、a、b、参数、全输出、epsabs、epsrel、,
/anaconda3/lib/python3.7/site-packages/scipy/integrate/quadpack.py in_quad(func、a、b、args、full_输出、epsabs、epsrel、limit、points)
446如果点为无:
447如果infbounds==0:
-->448返回四块封装(函数、a、b、参数、全输出、epsabs、epsrel、极限)
449其他:
450返回_quadpack._qagie(func,bound,infbounds,args,full_输出,epsabs,epsrel,limit)
以φV(x,n,r)表示
12
13 def Phi_V(x,n,r):
--->14返回(2/L)**(1/2)*sin(n*np.pi*x/L+n*np.pi/2)*4.7*(1-np.exp(-x))**2*(2/L)**(1/2)*sin(r*np.pi*x/L+r*np.pi/2)
15 def V_Func(n,r,j):
16返回四元组(Phi_V,-L/2,L/2,args=(n,r))[0]+(j*j+1)/(2*mu*r_e**2)
AttributeError:“Float”对象没有属性“sin”

通过导入单个函数并使用
np引用它们,您的导入有点混淆了。

import numpy as np
from numpy import sin, cos, pi
[...]sin(n*np.pi*x/L +n*np.pi/2)[...]
要么:

import numpy as np
[...]np.sin(n*np.pi*X/l + n*np.pi/2[...]
或:


此外,您从不导入
sym
,因此您发布的代码不是产生该错误的代码,因为编译器会首先遇到该错误。您是否可以发布生成该错误的实际代码,或者理想情况下是一个最小的示例。

修复您的导入

首先检查@Ari Cooper Davis对这些修复的回答。如果要包含导入语句,请确保您发布的代码已编译

这里有一个方法:

将sympy作为sym导入
将numpy作为np导入
从scipy.integrate导入四元组
你不需要numpy的sin、cos和pi方法,因为我们将使用sympy方法

空白

确保有表达式时,运算符周围的空白是均匀的。换句话说,您可以有
1+2
1+2
,但不能有
1+2
1+2
。这是提高可读性的好方法,可以帮助您在长期内发现错误。这种长表达式字符串会让人非常困惑非常快

辛比vs.努比

这两个库不能很好地结合在一起,一个是符号库,另一个是数字库

为了解决此问题,请将所有的
np
调用替换为
sym
(假设您使用
import symphy As sym
)。Symphy有自己的sin和pi版本,您可以与Numpy的版本进行交换

像这样:

返回((2/L)**(1/2))*sym.sin(n*sym.pi*(x/L)+n*sym.pi/2)*4.7*(1-sym.exp(-x))**2*(2/L)**(1/2)*sym.sin(r*sym.pi*x/L+r*sym.pi/2)

如果从混合对象(如数字、字符串或符号)生成numpy数组,则会得到对象数据类型数组

np.sin(arr)
在这样一个数组上通过调用
[x.sin()for x in arr]
执行,也就是说,它将任务委托给每个元素的
sin
方法。大多数对象,
from numpy import sin, cos, pi
[...]sin(n*pi*X/l + n*pi/2[...]
In [8]: Matrix                                                                  
Out[8]: sympy.matrices.dense.MutableDenseMatrix

In [9]: Matrix(3,3, lambda n,r: n+r)                                            
Out[9]: 
⎡0  1  2⎤
⎢       ⎥
⎢1  2  3⎥
⎢       ⎥
⎣2  3  4⎦
In [10]: def foo(n,r): 
    ...:     print(n,r, type(n), type(r)) 
    ...:     return n+r 
    ...:                                                                        

In [11]: Matrix(3,3,foo)                                                        
0 0 <class 'sympy.core.numbers.Zero'> <class 'sympy.core.numbers.Zero'>
0 1 <class 'sympy.core.numbers.Zero'> <class 'sympy.core.numbers.One'>
...
Out[11]: 
⎡0  1  2⎤
⎢       ⎥
⎢1  2  3⎥
⎢       ⎥
⎣2  3  4⎦
In [15]: def foo(n,r): 
    ...:     return np.sin(r) 
    ...:                                                                        

In [16]: Matrix(3,3,foo)                                                        
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
AttributeError: 'Zero' object has no attribute 'sin'
...
In [26]: L = 1 
    ...:  
    ...: r_e = 1.4 
    ...:  
    ...: mu = 916                                                               
In [27]: def foo(n,r): 
    ...:     return ((2/L)**(1/2)) * sin(n * pi * (x/L) + n * pi/2) * 4.7 * (1 -
    ...:  exp(-x))**2 * (2/L)**(1/2) * sin(r * pi * x/L + r * pi/2) 
    ...:                                                                        

In [28]: foo(1,2)                                                               
Out[28]: 
              2                    
     ⎛     -x⎞                     
-9.4⋅⎝1 - ℯ  ⎠ ⋅sin(2⋅π⋅x)⋅cos(π⋅x)

In [29]: Matrix(3,3,foo)                                                        
Out[29]: 
⎡0                   0                                    0                 ⎤
⎢                                                                           ⎥
⎢                     2                                2                    ⎥
⎢            ⎛     -x⎞     2                  ⎛     -x⎞                     ⎥
⎢0       9.4⋅⎝1 - ℯ  ⎠ ⋅cos (π⋅x)        -9.4⋅⎝1 - ℯ  ⎠ ⋅sin(2⋅π⋅x)⋅cos(π⋅x)⎥
⎢                                                                           ⎥
⎢                 2                                       2                 ⎥
⎢        ⎛     -x⎞                               ⎛     -x⎞     2            ⎥
⎣0  -9.4⋅⎝1 - ℯ  ⎠ ⋅sin(2⋅π⋅x)⋅cos(π⋅x)      9.4⋅⎝1 - ℯ  ⎠ ⋅sin (2⋅π⋅x)     ⎦