[英]How can I determine which variable to use for a defined function in python
[英]How can I use a variable that I previously defined in a loop (which is a list) for a separate function?
我有一個要讀取的文本文件,並且創建了兩個名為ppm
和peakAvg
變量。 peakAvg
是我要重用的變量,它是在循環中定義的。 這是我的代碼:
df2 = pd.read_table(expAtoms,delimiter = " ", header = None)
df2.rename(columns={0:"atom",1:"value"}, inplace=True)
df2.groupby('atom').value.mean()
for atom in df2.atom.unique():
ppm = df2.where(df2.atom==atom).value.dropna()
peakAvg = ppm.mean()
getQMulti(ppm,peakAvg,errorLim)
我獲得peakAvg的方法是從文本文件中讀取某些值(這就是ppm
)。 從這些值中,我按名稱將它們分組(這是atom
)。 但是, peakAvg
是通過獲取所有ppm值(即數字)並按其基團( atom
)取其平均值來生成的
變量peakAvg
看起來像這樣(即:如果我打印了peakAvg
的值,它將看起來像這樣):(這只是一個片段,但最后一個數字是列表中的實際最后一個數字)
5.14823
7.70533666667
5.69855333333
7.5981
5.79998333333
8.09575666667
7.4699025
7.60002
在上面的循環中,我將我的函數getQMulti
調用,我想將我的變量peakAvg
用於創建的另一個函數getQPred
。 這是我的第二個循環(我稱之為getQPred
)的樣子:
for atom2 in df3.atom2.unique():
ppm2=df3.where(df3.atom2==atom2).value2.dropna()
getQPred(ppm2,peakAvg)
現在,如果我打印出peakAvg
是什么,我只會得到一個數字的列表(這只是一個片段,但整個列表就是這個數字):
7.60002
7.60002
7.60002
7.60002
7.60002
7.60002
7.60002
7.60002
如何使我的peakAvg
變量恢復為以前的值(即,我擁有的第一個數字列表),因為現在當我調用函數getQPred
,會得到不准確的結果。
編輯:這些是我正在使用的功能:
SQRT2 = math.sqrt(2.0)
ERRMUL=2.0
errorLim = 0.3
sigma = 0.5
def getQ(x):
q = np.log(1.0-erf(np.absolute(x)/SQRT2))
return q
def getQMulti(ppm,peakAvg,errorLim):
x=(ppm-peakAvg)/errorLim
q= getQ(x)
x0 = 2.0
q0 = getQ(x0)
QMulti = 1.0+(q/np.absolute(q0))
return QMulti
def getQPred(ppm,peakAvg):
x = (ppm-peakAvg)/sigma
q = getQ(x)
x0 = 1.5
q0 = getQ(x0)
QPred = 1.0+(q/np.absolute(q0))
return QPred
在您的代碼中, peakAvg
不是一個列表,它是單個值,每次通過循環都會更改。
執行此操作的方式如下所示:
peakAvg_list = []
for something in whatever:
do_something_with_ppm
peakAvg = ppm.mean()
peakAvg_list.append(peakAvg)
do_something_with_peakAvg
也就是說,首先將peakAvg_List
初始化為一個空列表,然后每次通過該列表時, append
peakAvg
的新值peakAvg
到列表中。 這樣, peakAvg_list
包含了您想要的所有內容的列表,如果需要,您可以return
它們。
如果要對列表做進一步的處理,可以執行另一個循環:
for peakAvg in peakAvg_List:
x = (ppm - peakAvg)/sigma
### do something with x
但是您需要弄清楚該代碼的最終輸出/目標是什么。 您是否要列出正在計算的所有QPred
數量? 還是您需要以某種方式將它們收集到一個數字中? 答案取決於您實際要執行的操作,這與Python語法是分開的...
另外,鑒於您有興趣對各種列表的所有元素執行相同的操作,因此您應該了解numpy 。 (通常,您可能需要學習Python中的列表和循環,這是非常基本的概念,因此您可能要從類似Python官方教程的東西開始。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.