的NumPy的陣列集合標準偏差比方說,我有一個形狀聯合平均值和不同形狀
(682, 89, 138)
(2668, 76, 89)
(491, 62, 48)
numpy的陣列我應該如何計算均值和三個陣列的標準偏差結合起來呢?如果它們具有相同的形狀,我可以使用np.stack()
,然後獲得結果數組的平均值和標準偏差。
是否可以用不同尺寸的尺寸做到這一點?或者在得到平均值和標準值之前我必須重新塑形?
的NumPy的陣列集合標準偏差比方說,我有一個形狀聯合平均值和不同形狀
(682, 89, 138)
(2668, 76, 89)
(491, 62, 48)
numpy的陣列我應該如何計算均值和三個陣列的標準偏差結合起來呢?如果它們具有相同的形狀,我可以使用np.stack()
,然後獲得結果數組的平均值和標準偏差。
是否可以用不同尺寸的尺寸做到這一點?或者在得到平均值和標準值之前我必須重新塑形?
我們可以使用standard deviation
和mean
的公式來計算所有輸入數組的這兩個標量值,而不用連接/堆棧(特別是在大型NumPy數組上可能代價高昂)。讓我們分步實現 - 意思是標準偏差,因爲我們可以在std
計算中使用mean
。
獲取合併平均值:
因此,我們將開始與平均/平均。爲此,我們將得到每個數組的總和標量。然後,獲得總和,最後除以所有陣列中的元素數量。
獲取綜合標準偏差值:
對於標準的偏差,我們有公式爲:
因此,我們將使用上一步得到的合成平均值,使用std
公式得到平方微分,除以所有陣列中元素的總數,然後應用平方根。
實施
假設輸入陣列a
和b
,我們將有一個解決方案,像這樣 - 驗證
In [266]: a = np.random.rand(3,4,2)
...: b = np.random.rand(2,5,3)
...:
In [267]: N = float(a.size + b.size)
...: mean_ = (a.sum() + b.sum())/N
...: std_ = np.sqrt((((a - mean_)**2).sum() + ((b - mean_)**2).sum())/N)
...:
In [268]: mean_
Out[268]: 0.47854757879348042
In [270]: std_
Out[270]: 0.27890341338373376
N = float(a.size + b.size)
mean_ = (a.sum() + b.sum())/N
std_ = np.sqrt((((a - mean_)**2).sum() + ((b - mean_)**2).sum())/N)
採樣運行現在,爲了驗證,讓我們堆疊起來然後使用相關ufuncs -
In [271]: A = np.hstack((a.ravel(), b.ravel()))
In [273]: A.mean()
Out[273]: 0.47854757879348037
In [274]: A.std()
Out[274]: 0.27890341338373376
數組作爲輸入
對於列表保持所有這些陣列
表,我們需要通過這些迭代,像這樣 -
A = [a,b,c] # input list of arrays
N = float(sum([i.size for i in A]))
mean_ = sum([i.sum() for i in A])/N
std_ = np.sqrt(sum([((i-mean_)**2).sum() for i in A])/N)
樣品運行 -
In [301]: a = np.random.rand(3,4,2)
...: b = np.random.rand(2,5,3)
...: c = np.random.rand(7,4)
...:
In [302]: A = [a,b,c] # input list of arrays
...: N = float(sum([i.size for i in A]))
...: mean_ = sum([i.sum() for i in A])/N
...: std_ = np.sqrt(sum([((i-mean_)**2).sum() for i in A])/N)
...: print mean_, std_
...:
0.47703535428 0.293308550786
In [303]: A = np.hstack((a.ravel(), b.ravel(), c.ravel()))
...: print A.mean(), A.std()
...:
0.47703535428 0.293308550786
拼合,追加,計算 –
如何爲這些數組定義這些計算?不僅形狀不同,而且元素的總數也是如此。 – hpaulj
我想爲std的平均值和一個值得到一個值。如果形狀匹配,陣列將堆疊在另一個之上。 – Char