如何解决“ ImmutableDenseNDimArray”对象没有属性“ could_extract_minus_sign”?

时间:2019-02-09 21:44:36

标签: python python-3.x

首先,我是编码的新手。

我正在尝试在Python中模拟源流。但是我遇到了错误。我该如何解决?这是我的代码和错误:

代码

import numpy as nm
from matplotlib import pyplot
from sympy import *
import math as math
X,Y=symbols('X Y')
N=50
x_start,x_end=-2,2
y_start,y_end=-1,1
x=nm.linspace(x_start,x_end,N)
y=nm.linspace(y_start,y_end,N)
X,Y=nm.meshgrid(x,y)
width=10.0
height=width*((y_end-y_start)/(x_end-x_start))
pyplot.figure(figsize=(width,height))
pyplot.xlabel("X")
pyplot.ylabel("Y")
strength_source=10
x_source,y_source=-0.5,-0.25
q=(Y - y_source)/(X - x_source)
u_source = (strength_source / (2 * math.pi) * diff(atan(q),Y))
v_source = (strength_source / (2 * math.pi) * diff(atan(q),X))
pyplot.scatter(x_source,y_source)
pyplot.streamplot(X,Y,u_source,v_source,density=1, linewidth=1,
arrowsize=2, arrowstyle='->')

错误:

  File "F:\Anaconda\lib\site-packages\sympy\functions\elementary\trigonometric.py", line 2298, in eval
    if arg.could_extract_minus_sign():

AttributeError: 'ImmutableDenseNDimArray' object has no attribute 'could_extract_minus_sign'

1 个答案:

答案 0 :(得分:0)

问题出在功能参数“ atan”上。此函数仅接受一个参数x并返回x的反正切。您的代码正在将向量传递给该函数。尝试使用计算出的切线弧创建点列表。像这样:

array_resul_atan = []
for i in range(len(q)):
    atan_q = []
    for j in range(len(q[i])):
        atan_q.append(atan(q[i][j]))
    array_resul_atan.append(atan_q)

array_resul_atan = np.asarray(array_resul_atan, dtype='float')

类似地,diff函数仅将一个数组作为参数。您的代码正在传递两个数组。我的建议是审查公式并寻找更好的区分方法。

希望这会有所帮助。