![](/img/trans.png)
[英]Equivalent in Octave / Matlab for R head() and tail() functions
[英]scale() R function equivalent in Octave/Matlab
避免循環,是否有一種方法可以使數據矩陣圍繞列(或行)的平均值居中,並按標准偏差(按列或按行)縮放每個條目?
在R中這很容易: scale(data, center = T, scale = T))
。
但是我不知道如何在Ocatave或Matlab中實現相同的基本預處理。
在Octave中,此center()和zscore()具有兩個功能。 中心僅減去平均值,而zscore也除以sd(這種操作有時稱為標准化)
中心(x)
通過減去平均值來居中數據。
如果x是向量,則減去其平均值。 如果x是矩陣,請對每列執行上述操作。 如果給出了可選參數dim,則沿該維進行操作。
和
zscore(x,opt,dim)計算x的Z得分
如果x是向量,則減去其平均值並除以其標准偏差。 如果標准偏差為零,則除以1。
可選參數opt確定計算標准偏差時要使用的歸一化,並且具有與std的相應參數相同的定義。
如果x是矩陣,則沿第一個非單維度進行計算。 如果給定了第三個可選參數dim,則沿該維進行操作。
沒有一個函數可以執行此操作,但是您可以為std
使用dim
參數,並mean
要執行此操作。 我們還可以使用bsxfun
將其全部包裝為一行。
A = rand(5, 4);
% Column-wise
bsxfun(@rdivide, bsxfun(@minus, A, mean(A, 1)), std(A, [], 1))
% Row-wise
bsxfun(@rdivide, bsxfun(@minus, A, mean(A, 2)), std(A, [], 2))
說明
使用dim
參數mean
我們可以計算A
每一列的平均值。
M = mean(A, 1)
然后,我們可以使用bsxfun
從每列中的每個值中減去平均值( @minus
)。 我們需要使用bsxfun
因為M
是1 x nCols
而A
是nRows x nCols
。 bsxfun
將自動為我們廣播操作。
B = bsxfun(@minus, A, M);
然后,我們要再次使用dim
參數(第三輸入)來計算每列的標准偏差。
S = std(A, [], 1)
並將每列除以該標准差
bsxfun(@rdivide, B, S);
因此,將所有這些整合在一起
bsxfun(@rdivide, bsxfun(@minus, A, mean(A, 1)), std(A, [], 1))
要執行逐行操作,我們要做的就是將dim
參數從1(列)切換為2(行)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.