【发布时间】:2015-10-13 01:53:28
【问题描述】:
我定义了一个函数
def softthresh(u, LAMBDA):
if np.fabs(u) <= LAMBDA:
return 0
else:
return ((np.fabs(u) - LAMBDA) * u / np.fabs(u))
u 是一个numpy 数组,np.fabs 将检查每个数组元素(np.fabs(u_i)) 的关系。它给了我以下错误:
The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
跟进问题:
简单函数中的奇怪行为。
def softthresh(u,LAMBDA):
for i in u:
if np.fabs(i)<=LAMBDA:
return 0
else:
return ((np.fabs(i)-LAMBDA)*u/np.fabs(i))
ll = 5.0
xx = np.arange(-10,11)
yy = softthresh(xx,ll)
我得到的不是我所期望的。对于小于 5 的 u (=xx ) 数组元素,我应该得到零。但我没有。为什么?
【问题讨论】:
-
进入 if 块,你是想让 u 中的所有元素的绝对值都小于 lambda,还是只选择其中一个?
-
你看不懂错误信息吗?它无法在布尔上下文中评估
np.fabs(u) <= LAMBDA的结果,因为它不确定您的意思。您能否提供一些示例输入和输出/ -
实际上,我希望它像一个函数一样工作。 if 语句应该检查每个数组元素(即 x 值)并将结果(y 值)作为数组给出。