[英]Min and max of deviations from mean in Matlab
简介:我需要在某些给定的 Matlab 向量中找到与平均值的最大/最小可能偏差。 问题是,由于所涉及的 arrays 的尺寸很大,我无法显式构建这样的向量。 因此,我想知道是否有更聪明的方法来进行。 如果没有 memory 约束,我将在下面总结我将实施的过程,然后提出我的问题。
(1)考虑 Matlab A{1},..., A{28}
中的 28 个矩阵。 对于每个j=1,...,28
, A{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)令B
为R 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.