2017-06-12 77 views
0

我需要幫助編寫python中的函數來計算N-1樣本的平均值和標準偏差。從N-1樣本計算最低平均值和STDEV

我有96行quarduplicate樣本:在96x4 numpy陣列總共384個樣本。

對於每一行,我想:

  1. 取出一式四份一個樣品,使他們成爲一式三份

    [30,38,23,21] becomes [38,23,21] 
    
  2. 計算平均和那些一式三份樣品的標準偏差

    mean = 27.33, stdev = 9.29 
    
  3. 放回樣本,使它們爲druplicates再次

    [38,23,21] becomes [30,38,23,21] 
    
  4. 重複步驟1-3三次取出另一個樣本每次

    [30,23,21]: mean = 24.67, stdev = 4.73 
    [30,38,21]: mean = 29.67, stdev = 8.50 
    [30,38,23]: mean = 30.33, stdev = 7.51 
    
  5. 查找那些計算出的數據當中具有最低的標準偏差的平均值

    [30,23,21]: mean = 24.67, stdev = 4.73 
    
  6. 繼續前進到下一行並重復步驟1-4

  7. 輸出是一個96X1陣列發現平均對於每個相應行

基本上我想的一式四份之一是異常值的假設下,計算平均值和標準偏差。

我試着編寫一個嵌套for循環函數,但它變得太長和醜陋。我需要更聰明的方式提供建議。

回答

0

我想出了以下內容:

import numpy as np 

def bestMean(rows): 
    bestMeans = [] 
    for row in rows: 
     mean = [np.mean(row[:k] + row[k+1:]) for k in xrange(len(row))] 
     std = [np.std(row[:k] + row[k+1:]) for k in xrange(len(row))] 
     bestMeans.append((mean[np.argmin(std)], np.min(std))) 
    return bestMeans 

我做了一個快速測試,它似乎工作。但請注意,這不是最快的選擇,但它很可讀。