我是MatLab的新手并且遇到以下问题:我有2个具有大量整数的数组,我希望能够将任何给定的数据点从一个数组分配给另一个数组。例如:
array1 = [1, 2, 3]
array2 = [2, 4, 6]
因此,如果我有来自array1的数据,在这种情况下,我可以说array1*2 = array2
。有不同的方法可以解决这个问题,我有两个数组,每个数组大约有100k个元素。我需要将数据分成更小的段,然后为每个段创建一个平均值,这样我就可以为array1 * X~array2派生出来。我需要一个很好的估计,上面的例子并没有做任何正义。谢谢你的帮助
答案 0 :(得分:1)
根据我的理解,你想在公式中估算X:
array1*X = array2
如果你偏离,你得到每个值的估计值,而不是采用平均值得到X的估计值
mean(double(array2)./double(array1))
您担心100k值,总共200k值。这对Matlab来说并不大。 Concider表示每个值占用8个字节。 1600kB并不适合电脑。
您也可以使用简单的线性回归模型
sum(array1.*array2) / sum(array1.^2)
答案 1 :(得分:0)
我们再试一次。所以你有2x 100k点,其关系为y = b * x。 你想为100k点的不同部分找到b。
x = randi([1 2^15-1],1,1E5,'uint16'); %demo data
y = x.*2;
我之前给出的两种方法将产生2:
x=double(x);y=double(y);
mean(y./x)
sum(x.*y) / sum(x.^2)
如果要分段,可以先将数据剪切成较小的部分
segment=1000; %nr datapoints / segment
N = length(x)/segment; %nr of segments
L = floor(rem(N,1)*segment); %nr of datapoints in last segment
N = floor(N);
xc=mat2cell(x,1,[repmat(segment,[1,N]),L]);
yc=mat2cell(y,1,[repmat(segment,[1,N]),L]);
if L==0,xc(end)=[];yc(end)=[];end
现在你可以遍历xc并获得平均值
for ct = 1:length(xc)
x = xc{ct};y=yc{ct};
m(ct) = mean(y./x);
m2(ct) = sum(x.*y) / sum(x.^2);
end