сбор определенных строк из каждой подматрицы или массива ячеек

Я надеюсь собрать последние строки из каждой подматрицы или массива ячеек.

  • У меня есть 17 x 20 ячеек в матрице с именем A.

  • Каждая подматрица имеет разное количество строк, но одинаковое количество столбцов (всего 7 столбцов)

  • Я попытался создать файл, состоящий только из последних строк каждой подматрицы. Мой целевой файл будет

         M = [column1 column2 column3 column4 column5 column6 column7] 
         % made up of last rows of each submatrices, unknown number of lines, 7 columns
    
  • Так что я попытался

         for x_cc = 1:20
             for y_cc = 1:17
                  M = A{x_cc, y_cc}(end,:);
             end
         end
    
  • Но это не работает, выдавая ошибку Индексы нижнего индекса должны быть либо реальными положительными целыми числами, либо логическими.

  • Должен ли я сначала определить размер? Какую операцию следует сделать? или какие команды полезны? Я попробовал CellFun, но не уверен, как я могу использовать здесь.

  • Нужна любая помощь, чтобы решить эту ситуацию. Спасибо~!


person exsonic01    schedule 06.11.2012    source источник


Ответы (1)


Во-первых, похоже, вы поменяли местами x_cc и y_cc. Поскольку ваша матрица 17 x 20, x_cc — это строки, и их должно быть 17, а y_cc — 20.

Однако ошибка, которую вы получаете, вероятно, связана с попыткой проиндексировать пустой массив (один из содержащихся в A) с использованием end. Пример этой ошибки:

a = [];

a(end)
??? Subscript indices must either be real positive integers or logicals.

Если вам интересно, способ избежать циклов for будет выглядеть так:

B = cellfun(@(x) x(end,:), A, 'UniformOutput', 0);  
M = cell2mat(B(:));

Это захватывает последнюю строку из каждой матрицы в A, затем складывает их вертикально и преобразует в массив.

person nicktruesdale    schedule 06.11.2012
comment
Спасибо~! Но не могли бы вы сказать мне, что здесь за х? - person exsonic01; 06.11.2012
comment
и цикл for все еще не работает, хотя я следовал вашей инструкции, та же ошибка. - person exsonic01; 06.11.2012
comment
x — фиктивная переменная. Это похоже на то, что мы назовем каждый массив в A 'x', а затем проиндексируем его как x(end,:). - person nicktruesdale; 06.11.2012
comment
Спасибо~! но в моей матрице A есть пустые ячейки, что вызывает ошибку для команды cellfun. Как я могу игнорировать пустые ячейки? - person exsonic01; 06.11.2012
comment
Я пытался придумать способ игнорировать пустые файлы, но сейчас вам лучше удалить их заранее или проверить их в цикле for, прежде чем пытаться индексировать их. - person nicktruesdale; 06.11.2012