2013-07-22 3 views
0

У меня есть массив ячеек, заполненный числами, с 44 строками и разной длиной столбца в каждой строке
как я могу вычислить количество столбцов в каждом ряд? (столбцы, которые их содержимое не пусто)
Я использовал 2 различных способов, которые оба из них, где неправильно
1-ый:
вычисление количества столбцов в строке массива ячеек в matlab

%a is the cell array 
s=length(a) 

это дает 44, который является количество строк

2-й один

[row, columms]=size(a) 

но это не работает, либо вызвать число столбцов differe nt в каждой строке.
По крайней мере, я имею в виду количество столбцов, которые не являются пустыми.
Например, мне нужно количество столбцов в строке 1, которое равно 43 (a {1 1:43}), но оно дает количество столбцов для каждого элемента например, {1,1}, который равен 384 или {1,2}, a {1,3} и т. д.

ответ

0

Так что вы действительно спрашиваете: «Сколько непустых элементов в каждой строке моего массива ячеек?»

filledCells = ~cellfun(@isempty,a); 
columns = sum(filledCells,2); 
+0

спасибо, но так как я прокомментировал @Hugh Nolan, это неправильно – samdean

+0

@samdean, я думаю, я сейчас понимаю. Отредактировал мой ответ. –

+0

Большое спасибо, он дает правильный ответ – samdean

1

Вам необходимо получить доступ к каждому члену массива ячеек отдельно, вы ищете размер данные содержали в ячейке - ячейка контейнер. Два метода

цикл:

cell_content_lengths=zeros(1,length(a)); 
for v=1:length(a) 
    cell_content_lengths(v)=length(a{v}); 
end 

cellfun:

cell_content_lengths=cellfun(@length,a); 

Все пустые ячейки просто имеют длину 0. Для расширения для цикла матриц тривиально, и вы можете продлить cellfun часть на клетки, содержащей матрицу с помощью что-то вроде этого, если вы заинтересованы:

cell_content_sizes=cell2mat(cellfun(@length,a,'uniformoutput',false)); 

(Примечания для выше, каждый элемент a должен иметь тот же размер, в противном случае он будет давать ошибки о конкатенации различных матриц размера)

EDIT

Основываясь на ваш комментарий я думаю, что я понимаю, что вы ищете:

non_empty_cols = sum(~cellfun(@isempty,a),2); 

Благодаря @ MZimmerman6, который понял это передо мной.

+0

Вы должны сделать просуммировать результаты cellfun, особенно каждая ячейка содержит множество других клеток, так что это может быть просто 'сумма (cellfun (@ длина, а), 2)' – MZimmerman6

+0

Вы не имеете чтобы суммировать их, если я понял исходный пост - @samdean ищет размер каждого элемента каждого элемента ячейки. –

+0

Единственная причина, по которой я предполагал, что это неправда, заключалась в том, что он упомянул о пустых ячейках контента, которые произойдут, если бы это был чистый двумерный массив ячеек. – MZimmerman6

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