我生產從3個值之差的平均值,並希望把它放在一個列表檢查,如果值已經在列表中
列表中的示例中,我想平均看起來像這樣:
...
[6.0, 270.0, -55.845848680633168],
[6.0, 315.0, -47.572000492889323],
[6.5, 0.0, -47.806802767243724],
[6.5, 45.0, -48.511643275159528],
[6.5, 90.0, -45.002053150122123],
[6.5, 135.0, -51.034656702050455],
[6.5, 180.0, -53.266356523649002],
[6.5, 225.0, -47.872632929518339],
[6.5, 270.0, -52.09662072002746],
[6.5, 315.0, -48.563996448937075]]
前兩列匹配時會有多達3行(這兩列是極座標),當這種情況下,我想取第三個元素之間的差異,求平均值並追加極性點的座標和平均結果放入新列表中
for a in avg_data:
comparison = []
for b in avg_data:
if a[0] == b[0] and a[1] == b[1]:
comparison.append(b[2])
print comparison
z = 0 # reset z to 0, z does not need set now in if len(comp) == 1
if len(comparison) == 2: # if there are only 2 elements, compare them
z += -(comparison[0]) + comparison[1]
if len(comparison) == 3: # if all 3 elements are there, compare all 3
z += -(comparison[0]) + comparison[1]
z += -(comparison[0]) + comparison[2]
z += -(comparison[1]) + comparison[2]
z = z/3 #average the variation
avg_variation.append([a[0], a[1], z]) #append the polar coordinates and the averaged variation to a list
此代碼將正確的數據輸出到列表中,除了每次遇到匹配的極座標時輸出該數據,因此最終會出現重複的行。
要停止這個我試過執行if語句來尋找執行平均再
if a[0] not in avg_variation and a[1] not in avg_variation:
這不起作用之前在avg_variation名單極座標匹配,我得到的錯誤
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我不認爲任何或全部是我正在尋找的,因爲我只想檢查前兩列而不是第三列對已經附加的值。任何人有任何想法我怎麼能使我的陳述更好?
要清理多一點我的實際問題是什麼:
我的代碼通過對列表嵌套的列表,其中1號2個單元匹配搜索,執行3號元素的計算,然後將它們附加到一個新的列表。我的問題是,如果有2或3行的前2個元素相匹配,它將結果附加到新列表中2或3次,我希望它只做一次
編輯:對不起,我最初的問題是misleadng關於我的代碼的目的。
所以,只是爲了得到它直,你得到的名單都應該在他們的第三個數量方面相同的值(這應該是你的第三列的平均值以上)? – arshajii 2013-04-20 17:36:55
結果列表應該有嵌套列表,其第一個和第二個元素是極座標,第三個元素是這些極座標值的平均值。在結果列表中,每行應該有唯一的極座標。 – 2013-04-20 17:49:52
@markmcmurray:你的代碼並不計算這些值的平均值,但它會計算出不同元素之間的平均(有符號)差異。 – DSM 2013-04-20 17:52:00