【发布时间】:2017-10-05 06:30:56
【问题描述】:
我定义了一个包含 if 语句的函数。然后我想在函数中传入 X 数组,这是一个二维数组。我尝试使用 np.all,但尽管它没有给出错误,但它将所有 X 值设置为“如果 abs(x)
x = np.arange(-10.,15.+1.,1.)
y = np.arange(-4.,4.+0.1,0.1)
eps = 0.1
L = 2.
k = np.pi/(2.*L)
def q2(x):
if abs(x) < L:
return (((-3.*eps*np.cos(k*x))+(k*(np.sin(k*x)-np.exp(3.*eps*(x-L)))))/((9.*eps**2.) + k**2.))
if x > L:
return 0.
if x < -L:
return (-k*(1.+np.exp2(-6.*eps*L))*np.exp(3.*eps*(x+L)))/((9.*eps**2.) + k**2.)
def u2(x,y):
return 0.5*q2(x)*(y**2. - 3.)*np.exp(-0.25*y**2.)
X,Y = np.meshgrid(x,y)
vel_x=u2(X,Y)
【问题讨论】:
-
我可能遗漏了一些东西,但从你现在的代码来看,
x是一维数组? -
我不明白。目前,您拨打
np.all(x)是True或False。如果你把它当作一个数字(就像你在调用abs和>/<时所做的那样),它要么是1要么是0,所以abs不是必需的。如果您更愿意使用np.all(abs(x))或np.all(x>L),则在您选择x和y和None时不会返回q2中的3 个案例。你到底想要什么? -
@Windmill 在代码末尾,X, Y = np.meshgrid(x,y), vel_x = u2(X,Y)
-
@Michael np.all(x) 是通过 if 语句将二维数组 X(大 X)放入函数的失败尝试。当我调用 vel_x = u2(X,Y) 时,作为 2D 数组的大 X 将通过调用 q2(x,y) 函数的 u2(x,y) 函数。在q2(x,y)函数中,有一个if语句,它不取二维数组X。我要找的是如何通过if语句获取X的值。
-
@Michael 所以也许说得更清楚,我希望它这样做: vel_x = u2(X,Y) >>>> 将 X, Y 通过 u2(x,y) 函数包括 q2(x) 函数。现在,当 X 被传递到 q2(x) 函数时,我希望 2D 数组 X 的每个值都通过它。我将在这里更改我的代码以免混淆。
标签: python function if-statement multidimensional-array