2016-06-02 2 views
0

У меня есть массив ячеек, где каждая ячейка содержит матрицу (разные размеры). Я хотел бы, например, принять все вторые столбцы матриц, обеспечивающих такую ​​команду:MATLAB индексирование всех ячеек в массиве ячеек матриц

aux = cArray{:}(:,2) 

Результата я хотел бы получить массив ячеек, каждая ячейка которой содержит второй столбец исходной матрицы , но команда не работает (и я даже могу понять, почему, поскольку вывод cArray {:} не является матрицей ...) Есть ли компактная команда, чтобы получить то, что я хочу, а не цикл, заполняющий массив ячеек?

+0

@ Ответ Луиса показывает, как это делается, но если ваши элементы ячейки имеют одинаковый размер, вам следует рассмотреть возможность переключения на многомерные массивы. Вчера [очень похожий вопрос появился] (http://stackoverflow.com/q/37557025/5067311) (вопиющая самореклама), вы можете найти там, как это делается. –

ответ

4

Причина, по которой это не работает, заключается в том, что индексирование массива ячеек с помощью {:} дает comma-separated list, который больше не индексируется. Вы можете просмотреть его как «развернутое» содержимое массива ячеек, разделенное запятыми.

Вы можете добиться того, что вы хотите с cellfun:

result = cellfun(@(x) x(:,2), cArray, 'uniformoutput', false); 

Это относится анонимная функция @(x) x(:,2) к содержанию каждой ячейки, и упаковывает результаты в массиве ячеек.

Смежные вопросы