【问题标题】:MATLAB: Accessing Multidimensional Cell Matrix IndexMATLAB:访问多维单元矩阵索引
【发布时间】:2017-02-24 20:31:42
【问题描述】:

我有单元矩阵,其尺寸根据用户输入而变化。作为用户,我想使用一个维度的某个索引,同时其他维度的元素都存在。我认为最好用一个例子来说明这种情况:
假设我的单元矩阵 A 的大小为2x3x4x5x7。我想使用1.3.4. dimension 的整个元素。同时只有2. dimension2. element5. dimension3., 5. elements。这可以通过以下方式轻松实现:

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

情况 A 是函数的输入并且维度正在变化。如何通过线性索引或其他方式获得此结果? 我知道没有这样的语法,但我的情况可以描述如下:

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

【问题讨论】:

    标签: matlab multidimensional-array indexing


    【解决方案1】:

    这个问题可以用下面的代码解决:

    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{:});
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-10
      • 2015-08-14
      • 1970-01-01
      • 2014-02-21
      • 2012-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多