0

列の数が異なるデータセットで分析を行おうとしていますが、方程式を使用するたびに3つの列を使用する必要があります。データセット内のすべての列を使用したい(最初と最後の列は機能しないためを除く)が、中央の列、前の列、および後の列を選択する必要があります。これらの方程式を実装する必要があります。

lower_actual = lower_original - dark;
lower_avg = sum(lower_actual)/length(lower_actual);
lower_gain = lower_avg./lower_actual;

upper_actual = upper_original - dark;
upper_avg = sum(upper_actual)/length(upper_actual);
upper_gain = upper_avg./upper_actual;

middle_actual = middle_original - dark;

x1 = lower_actual;
x2 = middle_actual;
x3 = upper_actual;
y1 = lower_gain;
y3 = upper_gain;
y2 = (((x2-x1).*(y3-y1))./(x3-x1))+y1;
interpolate = y2.*middle_actual;

これらの方程式では、変数は次のように相関します。

lower = column before
middle = center column
upper = column after
dark = first column in data set
4

2 に答える 2

2

HANKEL関数を使用して、3つの連続する列すべて(最初と最後の列を除く)のすべての可能なインデックスを生成できます。

例:

>> X = rand(10,7);
>> idx = hankel((1:3)+1, 3+1:size(M,2)-1)
idx =
     2     3     4
     3     4     5
     4     5     6

各列には、Xの列の1つの組み合わせの前/中/後のインデックスが次の順序で表示されます。

interpolate = zeros(size(X,1), size(idx,2));
for i=1:size(idx,2)
    ind = idx(:,i);
    xLower = X(:,ind(1));
    xMiddle = X(:,ind(2));
    xUpper = X(:,ind(3));

    %# perform calculations
    interpolate(:,i) = ...;
end
于 2012-08-01T18:10:37.673 に答える
1

マトリックスMで作業していると仮定します。

M = randn(10, 7);

最初の列と最後の列をスキップして列をループするだけです。

interpolate = zeros(size(M, 1), size(M, 2) - 2);
dark = M(:, 1);
% Loop over the columns. Do not use the first and the last column as
% center columns.
for idx = 2 : size(M, 2) - 2
    lower_original = M(:, idx);
    middle_original = M(:, idx + 1);
    upper_original = M(:, idx + 2);

    % Your computations.
    lower_actual = lower_original - dark;
    lower_avg = mean(lower_actual);
    lower_gain = lower_avg./lower_actual;

    upper_actual = upper_original - dark;
    upper_avg = mean(upper_actual);
    upper_gain = upper_avg./upper_actual;

    middle_actual = middle_original - dark;

    x1 = lower_actual;
    x2 = middle_actual;
    x3 = upper_actual;
    y1 = lower_gain;
    y3 = upper_gain;
    y2 = (((x2-x1).*(y3-y1))./(x3-x1))+y1;

    interpolate(:, idx - 1) = y2.*middle_actual;
end

フェッチされる最大列インデックスはですsize(M, 2) - 3 + 2 == size(M, 2) - 1。つまり、最後の列はスキップされます。

于 2012-08-01T17:49:34.077 に答える