доступ к n-му столбцу массива ячеек в Matlab - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть массив ячеек, например, с 3 ячейками, в которых ячейки являются матрицами (3,8), (3,2), (3, 30), теперь я хочу получить доступ к n-му столбцу целых данных без преобразованиямоя ячейка в матрицу, например, если я ищу 8-й столбец, это должен быть второй столбец 3-й ячейки.Один из способов - это преобразовать его в матрицу, но моя ячейка слишком длинная, и у меня не хватает памяти, когда я пытаюсь преобразовать всю ячейку в матрицу.Затем я попробовал этот код ниже, но он не работает правильно.я хочу знать, что я делаю неправильно.

любая помощь приветствуется.

function [col,i,idx] = find_cellCol(cel, idx)
lgh = length(cel);
i = 1;

me = zeros(2,length(cel));
while( i <= lgh && length(cel{1,i})<=idx)

idx = idx - length(cel{1,i});
i = i+1;

end%end while

if idx == 0
col = cel{1,i-1}(:,end);
else
col = cel{1,i}(:,idx);
end
end

1 Ответ

0 голосов
/ 06 декабря 2018

Получите только количество строк каждой матрицы каждой ячейки, затем сложите эти номера строк и проверьте, на какой ячейке вы достигнете 8-й строки.

%dummy data
x{1} = rand(3,8);
x{2} = rand(3,2);
x{3} = rand(3,20);

val   = 8;
csize = cellfun(@(x) size(x,1),x);    %get the number of line for each cell
csum  = cumsum(csize);                % [3,6,9]
ind   = find(csum>=val,1);            % on which cell do we reach the # line
x{ind}((val-csum(ind))+csize(ind),:)  %access the right line

fprintf('Accessing the line %d of the cell %d',(val-csum(ind))+csize(ind),ind)

Что вернет:

Accessing the line 2 of the cell 3

РЕДАКТИРОВАТЬ:

Данный пример вводит меня в заблуждение, так как я был уверен, что вы пытаетесь получить доступ к строке (первое измерение), а не к столбцу (второе измерение).

Ноесли вы хотите получить доступ к столбцу, вы можете просто настроить приведенный выше код:

val   = 8;
csize = cellfun(@(x) size(x,2),x);    %get the size of the second dimension now.
csum  = cumsum(csize);                
ind   = find(csum>=val,1);            
x{ind}(:,(val-csum(ind))+csize(ind))  %access the right column
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...