2016-10-15 15 views
0

ユーザ入力に応じて寸法が変化するセルマトリックスがあります。ユーザーとしては、他のディメンションの要素全体が存在する一方で、あるディメンションの特定のインデックスを使用したいと考えています。状況をある例で説明する方が良いと思います。
サイズが2x3x4x5x7のセルマトリックスAを仮定します。 1.3.4. dimensionという要素を使いたいです。同時に、2. dimension3., 5. elements2. elementのみが5. dimensionです。これは簡単に実現できます。MATLAB:多次元セルマトリックスインデックスへのアクセス

A(:,2,:,:,[3 5]); 

ケースAは関数の入力であり、寸法はどのように変化していますか?リニアインデックスや別の方法でこの結果を得るにはどうすればよいですか? 私は、このような構文何が存在しないことを知っているが、次のように私の状況を説明することができます。

whole_indexes = sub2ind(size(A),[:,2,:,:,[3,5]]); 
A(whole_indexes) 

答えて

0

この問題は、以下のコードで解決することができます:

size_A   = size(A); % A is the matrix whose elements will be selected 
whole_index  = cellfun(@(x) 1:x,num2cell(size_A),'UniformOut',false); % create a cell array which includes all the possible numbers 
all_sizes  = cellfun(@length,whole_index); % each dimension size 
%% select the desired indexes in your desired dimensions 
whole_index{1} = [1 2]; % first dimension first 2 elements 
whole_index{2} = [2]; % second dimension second element 
all_numbers  = combvec(whole_index{:}).'; % whole possibilities 
all_numbers  = mat2cell(all_numbers,max(size_nums),ones(1,min(size_nums))); % cell format of possibilities 
comb_inds  = sub2ind(all_sizes,all_numbers{:}); 
desired_out  = A(comb_inds); 

別の解決策は次のように書かれることになります:

size_A   = size(A); % A is the matrix whose elements will be selected 
    whole_index  = cellfun(@(x) 1:x,num2cell(size_A),'UniformOut',false); 
    %% select the desired indexes in your desired dimensions 
    whole_index{1} = [1 2]; % first dimension first 2 elements 
    whole_index{2} = [2]; % second dimension second element 
    desired_out  = A(whole_index{:}); 
関連する問題