簡體   English   中英

Matlab 中與平均值的偏差的最小值和最大值

[英]Min and max of deviations from mean in Matlab

簡介:我需要在某些給定的 Matlab 向量中找到與平均值的最大/最小可能偏差。 問題是,由於所涉及的 arrays 的尺寸很大,我無法顯式構建這樣的向量。 因此,我想知道是否有更聰明的方法來進行。 如果沒有 memory 約束,我將在下面總結我將實施的過程,然后提出我的問題。

(1)考慮 Matlab A{1},..., A{28}中的 28 個矩陣。 對於每個j=1,...,28A{j}有 4 列。 A{j}的行數可以在j=1,..., 28中不同,並存儲在向量r中。

clear
rng default
A=cell(28,1);
r=randi(28,10000,1)+10000; %28x1
for j=1:28
A{j}=randn(r(j),4); %r(j)x4
end

(2)對於每個j=1,...,28 ,設b{j}是通過將A{j}的前兩行相加並減去最后兩行得到的r(j) x 1向量A{j}

b=cell(28,1);
for j=1:28
    b{j}=  A{j}(:,1)+A{j}(:,2)-A{j}(:,3)-A{j}(:,4); %r(j)x1
end

(3)BR x 28矩陣,它是從向量b{1},...,b{28}獲得的 28 維網格:

[ca, cb, cc, cd, ce, ...] = ndgrid(b{1}, b{2}, b{3}  , ..., b{28});
B(:,1)=ca(:);
B(:,2)=cb(:);
...
B(:,28)=...;

為不完整的代碼道歉。 您可以想象,這是我遇到問題的步驟,如下所述。

(4)對於B的每一行,我計算該行與其平均值之間的差,並將結果存儲在R x 28矩陣D中:

R=size(B,1);
D=zeros(R,28);
for t=1:R
    D(t,:)=B(t,:)-mean(B(t,:)); 
end

(5)對於每個j=1,...,28 ,我計算D(:,j)的最小值和最大值並將其存儲在矩陣F

F=zeros(2,28);
for j=1:28
F(1,j)=min(D(:,j));
F(2,j)=max(D(:,j));
end

問題: F是我要構建的矩陣。 但是,由於r(1),..., r(28)較大,步驟 (3) 是不可行的。 即使是一個循環也需要永遠。 因此,我在問:有沒有更聰明的方法來構造F來避免我顯式獲得B

這是一個快速的解決方案(不使用ndgrid ):

F = zeros(2,28);
mx = cellfun(@max,b)
mn = cellfun(@min,b)
for k = 1: 28
    F(1,k) = min(b{k}-(b{k}+sum(mx)-mx(k))/28);
    F(2,k) = max(b{k}-(b{k}+sum(mn)-mn(k))/28);
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM