Python 计算函数中数组元素的绝对值
我定义了一个函数Python 计算函数中数组元素的绝对值,python,numpy,scipy,Python,Numpy,Scipy,我定义了一个函数 def softthresh(u, LAMBDA): if np.fabs(u) <= LAMBDA: return 0 else: return ((np.fabs(u) - LAMBDA) * u / np.fabs(u)) 跟进问题: 简单函数中的奇怪行为 def softthresh(u,LAMBDA): for i in u: if np.fabs(i)<=LAMBDA:
def softthresh(u, LAMBDA):
if np.fabs(u) <= LAMBDA:
return 0
else:
return ((np.fabs(u) - LAMBDA) * u / np.fabs(u))
跟进问题: 简单函数中的奇怪行为
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)
def软阈值(u,λ):
对于我在u:
如果np.fabs(i)如果u
是一个数组,则需要在函数中遍历它的所有元素
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)
或者,您可以让u
成为数组的一个元素,并使用如下循环调用它:
tbl = np.array([1, 2, 3, 4, 5])
for elt in tbl:
print(softthresh(elt, 3))
结果将是:
0
0
0
1.0
2.0
您的问题取决于numpy阵列。如果您使用的是列表,那么它会起作用
否则,如果需要numpy数组,可以使用如下代码
def softthresh(u,LAMBDA):
for i in u:
if np.fabs(i)<=LAMBDA:
return 0
else:
return ((np.fabs(u)-LAMBDA)*u/np.fabs(u))
def软阈值(u,λ):
对于我在u:
如果np.fabs(i)您正在从内部循环调用return
。因此,函数在计算u
的第一个成员后立即返回
因为您使用的是NumPy,所以应该利用NumPy一次对整个阵列进行操作的能力,以及NumPy的智能索引
def softthreshold(u, LAMBDA):
notzero = np.fabs(u) > LAMBDA # find the indeces of elements that need to be scaled
rr = np.zeros_like(u) # an array the same size/type as u, already initialized to 0
rr[notzero] = (np.fabs(u[notzero])-LAMBDA)*u[notzero]/np.fabs(u[notzero]) # scale each of the members that aren't zero
return rr
要进入if块,您希望u中的所有元素的绝对值小于λ,还是仅其中一个元素?您不明白错误消息吗?它不能评估np.fabs(u)的结果实际上,我希望它像函数一样工作。if语句应该检查每个数组元素(即x值),并将结果(y值)作为数组给出。但是我还是不明白它><请参见下面的答案好的,这很有帮助。非常感谢。但是有没有一种方法可以像在matlab中那样实现呢。a=数组,f=函数,b=解\数组:f(a)=b?这在我的函数中是可能的吗?@user5437072你可以像在你原来的帖子中一样调用它-yy=softthreshold(xx,ll)
。还是我没有正确理解你的后续问题?@mtrw这真的不应该是np.where
,而是一个简单的条件:notzero=np.fabs(u)>LAMBDA