1

私は2つの配列を持っています。もう一方に格納されている配列の場所のリストに基づいて、一方からデータの範囲をコピーしたいと思います。たとえば、最初の配列が 100 行と 2 列で構成されている場合、行 10 ~ 20、行 60 ~ 70、および行 75 ~ 79 をコピーすることができます。その場合、2 番目の配列の内容は次のようになります。

b =

    10    20
    60    70
    75    79

2 番目の配列に基づいて最初の配列の適切な行を選択するには ('a' と呼びましょう)、次のようにします。

b = [a(1,1):a(1,2) a(2,1):a(2,2) a(3,1):a(3,2)]

これは機能し、配列 'b' を返します。これは、基本的に配列 'a' から正しい内容が抽出されたものです。

問題は、配列 'b' に実際には 50 ~ 60 行 (つまり、含まれる範囲) が含まれていることです。

「b」の任意の数の行で機能するように、上記のコードをより効率的にするにはどうすればよいですか?

4

3 に答える 3

0

cellfunセル配列を使用したソリューション:

% データの例:

a = reshape(1:100, 10, 10);
b = [ 2 3; 5 8; 10 10 ];

コードは次のとおりです。

bCell = mat2cell(b, 3, [ 1 1 ]);

aRows = cell2mat(arrayfun(@(x,y) a(x:y, :), bCell{1}, bCell{2}, 'UniformOutput', false));
于 2012-06-15T17:39:26.997 に答える
0

a から抽出される値の範囲が b にあり、c に移動する必要があると仮定すると、a を使用できます。

% input
a = rand(100,2);
b = [10 20; 60 70; 75 79];
% output
c = zeros(1,2);
for i = 1:size(b,1)
    c = vertcat(c a(b(i,1):b(i,2), :));
end        
c = c(2:size(c,1), :);
于 2012-06-15T17:05:43.793 に答える