如何使用python的maplambda将元素映射到某个数字?

2024-09-28 01:24:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数字阵列称为p2De。第一行有多个元素可能大于1。我想设置小于1比1的元素。下面是我的代码,但显示错误。。。为什么?如何修复?在

bounde=1
p2De[:0]=map(lambda x:bounde if (x < bounde),p2Di[:0])

  File "C:\Users\wange\workspace\cathode\src\diffusion.py", line 86
    p2De[:0]=map(lambda x:bounde if (x < bounde),p2Di[:0])
                                                ^
SyntaxError: invalid syntax

Tags: lambda代码元素mapif错误数字users
3条回答

正如其他人所指出的,语法问题在于lambda。在

我不认为你想要p2De[:0]-那是一个空数组。p2De[0]是第一行。p2De[0,:]是相同的,它向人类读者清楚地表明您选择了2d数组的第一行。在

使用map或comprehension是可行的,但是它们没有提供比简单循环(因为您不需要替换所有值)的太多优势(如果有的话):

for i,v in enumerate(p2De[0,:]):
    if v<1:
        p2De[0,i] = 1

但是这些迭代都不是好的numpy实践。你应该试着用向量运算来思考。通常的做法是使用布尔掩码(或索引)来选择应更改的值:

^{pr2}$

还有一个numpy函数,它应用如下限制,np.maximum

p2De[0,:] = np.maximum(p2De[0,:], 1)

np.clip同时应用最小和最大边界:

p2De[0,:] = np.clip(p2De[0,:], minbd, maxbd)
np.clip(p2De[0,:], minbd, maxbd, p2De[0,:])  # alt calling method

Python(3)的老板们鼓励我们在地图和lambda上使用函数和理解。例如,如果plist是与您的p2De[0,:]行类似的列表:

def clip(x):
    return 1 if x<1 else x 
plist = [clip(x) for x in plist]
plist = [min(x, 1) for x in plist] # using a builtin for this simple case

应该是的

lambda x:bounde if (x < bounde) else x

您还可以使用列表理解,它更具可读性。另外,我将使用max内置函数来代替lambda:

^{pr2}$

您需要为您的lambda函数指定else

lambda x:bounde if (x < bounde) else #stuff

相关问题 更多 >

    热门问题