Как рассчитать количество строк в массиве ячеек в MATLAB

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

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

В качестве примера у меня есть x как массив ячеек:

x =     [5]    [1x8 double]    [5]

Этот массив ячеек состоит из одной строки и трех столбцов. Мне нужен код для вычисления количества строк, равных «1», но я не нашел способа его вычислить.


person SaraDean    schedule 22.12.2013    source источник
comment
Вы можете привести пример? Каково содержимое массива ячеек a?   -  person Luis Mendo    schedule 23.12.2013
comment
Исходя из того, как вы вычисляете количество столбцов: sum(filledCells) для количества строк.   -  person Oleg    schedule 23.12.2013
comment
@ Олег не вышло   -  person SaraDean    schedule 23.12.2013
comment
Ваш вопрос был непонятен, доказательство 4 отвечает, когда решение тривиально. Если бы вы вначале предоставили пример с x, вы получили бы asnwet в течение 1 минуты. Чтобы избежать путаницы в будущем, количество строк в массиве ячеек может относиться к содержимому массива ячеек. Поэтому, чтобы избежать путаницы, помните, что массив ячеек является оболочкой, и его содержимое может быть любым, поэтому используйте размер массива ячеек.   -  person Oleg    schedule 23.12.2013
comment
@Oleg Если бы я знал, что ответ был в размере массива, я бы вообще не задавал этот вопрос. Я просто хотел узнать количество строк в массиве ячеек, и я думаю, что это ясно.   -  person SaraDean    schedule 23.12.2013


Ответы (4)


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

 [nr,nc]=size(x)

Какой номер - это количество строк, спасибо всем вам.

person SaraDean    schedule 23.12.2013
comment
Теперь я понимаю, что ты имеешь в виду. Да, это сработает. Как это просто! :) - person herohuyongtao; 23.12.2013
comment
@ herohuyongtao Да, это было так просто, спасибо тебе - person SaraDean; 23.12.2013

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

dim = 1; %// 1 for rows, 2 for columns
result = sum(cellfun(@(c) size(c,dim), a), dim);

Пример:

>> a = {1, [2 3], []; 4, [], 5}
a = 
    [1]    [1x2 double]     []
    [4]              []    [5]
>> dim = 1;

дает

>> result = sum(cellfun(@(c) size(c,dim), a), dim)
result =
     2     1     1
person Luis Mendo    schedule 22.12.2013

Пытаться

%% "a" is the cell array, total num of rows will be saved in "rows"
num = length(a); % num of objects in "a" - big rows
rows = 0;
for i=1:num
    [r c] = size(C{i})
    rows = rows+r;
end
person herohuyongtao    schedule 22.12.2013
comment
он не будет работать должным образом для всех примеров, таких как x {1,1} = [2 3 4], x {1,2} = [2], x {1,3} = [2 3 4] - person SaraDean; 23.12.2013
comment
@SaraDean Я только что тестировал в MATLAB, он работал отлично. Он возвращает rows=3, верно? - person herohuyongtao; 23.12.2013
comment
@SaraDean Почему не 3? У него есть 3 ряда. Я не понимаю. - person herohuyongtao; 23.12.2013
comment
может я ошибаюсь !? x {строки, столбцы} это неправильно? x {1,1: 3} означает одну строку и три столбца, верно? - person SaraDean; 23.12.2013

Самый простой способ добиться этого - получить первое измерение размера.

rowCount = size(x,1)
person Dennis Jaheruddin    schedule 24.12.2013