2016-09-10 5 views
1

Я ищу быстрый и простой способ доступа к определенным массивам, находящимся внутри массивов ячеек. Например, предположим, что у меня естьПростой способ доступа к массивам в массивах ячеек

A = rand(10,2); 
B = rand(15,1); 
C = rand(130,1); 
D = rand(16,1); 
E = rand(1000,25); 
my_cell = {A,B,C,D,E}; 

Скажем, я хочу, 1-й, 2-й и 4-й матрицы только (т.е., A, B и D) внутри нового массива ячеек. Таким образом, новый массив ячеек будет состоять из {A, B, D}. Это, очевидно, легко с использованием цикла for:

idx=[1,2,4]; 
new_cell=cell(1,length(idx)); 
for i=1:length(idx) 
    new_cell{i}=my_cell{idx(i)}; 
end 

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

ответ

1

{my_cell{idx}} должен сделать трюк.

my_cell{idx} возвращает элементы в my_cell, индексированные idx, как список разделенных запятой. Это эквивалентно A, B, D. Все, что вам нужно сделать, это закрыть этот список с помощью {}, чтобы сделать из него массив ячеек.

+0

примечание. этот подход не будет работать, если вы хотите сохранить структуру. Измените исходную ячейку на 'my_cell = {A; B; C; D; E}', и вы поймете, что я имею в виду. –

+0

Удивительный! Спасибо за советы по поводу структуры. Я понимаю что ты имеешь ввиду. –

3

Да, вы можете индексировать массив ячеек как обычный массив (т. Е. Использовать скобки вместо скобок). Фактически, это - это «нормальный» массив: это обычный массив элементов «ячейки». Поэтому их индексирование, как обычный массив, просто возвращает отдельные «элементы ячейки», а не их содержание.

Таким образом, вы можете просто сделать

my_cell(idx) 


EDIT: Просто, чтобы сделать разницу четкую между «индексация ячейки как массив» и «сбор разделенных запятыми-вывода в новую ячейку массив»подходы:

>> my_cell = {'A','B','C'; 'D','E','F'; 'G', 'H', 'I'}  
my_cell = 
    'A' 'B' 'C' 
    'D' 'E' 'F' 
    'G' 'H' 'I' 

>> my_cell(1:2,1:2) 
ans = 
    'A' 'B' 
    'D' 'E' 

>> {my_cell{1:2,1:2}} % this will ALWAYS be a horizontal cell vector 
ans = 
    'A' 'D' 'B' 'E' 
+0

Не проще, чем это :) Спасибо –

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

  • Нет связанных вопросов^_^