你能在matlab中给出两组数据的值B中给一个值A吗?

时间:2017-07-28 06:44:19

标签: arrays matlab

我是MatLab的新手并且遇到以下问题:我有2个具有大量整数的数组,我希望能够将任何给定的数据点从一个数组分配给另一个数组。例如:

array1 = [1, 2, 3]
array2 = [2, 4, 6]

因此,如果我有来自array1的数据,在这种情况下,我可以说array1*2 = array2。有不同的方法可以解决这个问题,我有两个数组,每个数组大约有100k个元素。我需要将数据分成更小的段,然后为每个段创建一个平均值,这样我就可以为array1 * X~array2派生出来。我需要一个很好的估计,上面的例子并没有做任何正义。谢谢你的帮助

2 个答案:

答案 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