2017-03-17 108 views
0

我的數據有一些錯誤需要計算。錯誤在某個點發生變化,並且必須在函數中稍作調整。 所以我需要的東西是這樣的:如果在python函數中聲明

import numpy as np 

U1=np.array([0.1,0.5,1,2]) 

def UErr(U): 
    if U>0.68: 
     return 0.003*U+0.01 
    else: 
     return 0.003*U+0.001 

U1Err=UErr(U1) 

這顯然是行不通的,因爲U> 0.68不可能是真實的,因爲它是一個數組。 我想這樣做(大寫): 它應與下面的值返回數組:

U1Err=([0.0013,0.0025,0.013,0.016]) 

我知道,這是一個非常基本的問題,因爲我剛學上側的一些Python(光)數據分析,我缺少相當多的基礎知識。

希望有人能幫助我。 :)

+0

難道這應該返回整個數組(或Python中的'list')修正後的數值? – Avantol13

+0

你已經遍歷循環。 「 – bhansa

+0

」不可能是真的,因爲它是一個數組「你爲什麼不嘗試使它自己工作?另外什麼是「x」? – Vallentin

回答

0

如果你有一個列表作爲輸入,你需要循環或超過它

def UErr(U): 
    return map(lambda u: 0.003*u+0.01 if u > 0.68 else 0.003*u+0.001, U) 
+0

非常感謝。 :) –

+0

好的,我再次檢查。這實際上並不奏效。因爲在U中有大於0.68的元素,它會爲所有元素返回更高的值(0.003 * u + 0.01),而不僅僅是大於0.68的元素。假設U = np.array([2,1, 0.5,0.1]),那麼它應該返回第一個值0.16和最後一個元素0.0013。用你的代碼,我得到了0.0103的最後一個。 :/ –

+0

我不知道你爲什麼需要Numpy,但再次檢查答案 –

-1

您將需要運行一個循環來在列表或數組中的每個元素應用功能。如果你想獲得整個數組的所有元素,你可以返回列表直到結束。

def UErr(U): 
    for element in range(0,len(U)): 
     if U[element] > 0.68: 
      U[element]= 0.003*U+0.01 
     else: 
      U[element] = 0.003*U+0.01 
    return U 
+0

'element'是列表中的值,而不是索引。除非'U'包含從0開始的連續整數,'U [element]'將失敗。 –

+0

非常感謝。 :) –

+0

這是真的,它需要越過列表的範圍而不是元素本身。做了更正:) – jaferic

0

也能做到這一點的方法:

def UErr(U): 
    if any(i > 0.68 for i in U): 
     return map(lambda x:0.003*x+0.01,U) 
    else: 
     return map(lambda x:0.003*x+0.001,U)