Matlab Как выполнить вычитание для нескольких массивов ячеек?

Приведенный ниже код предназначен только для двух массивов ячеек с именами B и C.

A=cellfun(@minus, B, C, 'UniformOutput', false)

Я хочу выполнить цикл, чтобы иметь возможность выполнять вычитание для всех моих массивов ячеек. Примеры B{i} и C{i} приведены ниже:

B{1}=[0.435] 
B{2}=[0.333] [0.532] 
B{3}=[0.021] [0.432] [0.312]        //command window output

C{1}=[0.211] 
C{2}=[0.243] [0.116] 
C{3}=[0.553] [0.212] [0.375]        //command window output

B{1}-C{1}
B{2}-C{2}
B{3}-C{3}

Я попытался включить {i} за A , B и C, чтобы получилось что-то вроде:

A{i}=cellfun(@minus, B{i}, C{i}, 'UniformOutput' , false)

Однако похоже, что это не работает. Есть ли какое-нибудь решение для этого? Спасибо


person Allyson    schedule 10.11.2014    source источник
comment
На самом деле я писал ответ на ваш предыдущий вопрос, когда вы его удалили... Пожалуйста, избегайте репостов вопросов!   -  person Amro    schedule 10.11.2014
comment
извините за неудобства. это cellfun для нескольких массивов ячеек? потому что это может только минус между двумя.   -  person Allyson    schedule 10.11.2014
comment
ваш опубликованный код даже не является допустимым синтаксисом, вы не можете написать C{3}=[0.553] [0.212] [0.375]! В следующий раз, когда мы включим код, мы сможем скопировать/вставить его, и это сработает.   -  person Amro    schedule 10.11.2014
comment
На самом деле это мой вывод командного окна.   -  person Allyson    schedule 10.11.2014
comment
Я знал это, но нам только труднее помочь вам. Вы могли видеть, что в вашем предыдущем вопросе была путаница именно из-за этого, другие просто не могли понять, в каком формате были ваши данные. Чем яснее ваш вопрос, тем выше ваши шансы получить полезные ответы.   -  person Amro    schedule 10.11.2014
comment
Спасибо за ваш совет.   -  person Allyson    schedule 10.11.2014


Ответы (1)


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

У вас есть ненужные вложенные массивы ячеек, т. е. B — это массив ячеек из массивов ячеек, а B{i} — это массив ячеек из чисел.

Если вы хотите сохранить этот формат, вот один из способов вычисления результата с использованием cellfun (A также будет массивом ячеек из массивов ячеек чисел):

% exiting data
B = cell(3,1);
B{1} = {0.435};
B{2} = {0.333, 0.532};
B{3} = {0.021, 0.432, 0.312};
C = cell(3,1);
C{1} = {0.211};
C{2} = {0.243, 0.116};
C{3} = {0.553, 0.212, 0.375};

A = cellfun(@(b,c)cellfun(@minus, b, c, 'Uniform',false), B, C, 'Uniform',false);

В противном случае я предлагаю вам сократить уровень вложенности и использовать вместо этого:

% note the difference between square-brackets and curly-brackets
B = cell(3,1);
B{1} = [0.435];
B{2} = [0.333, 0.532];
B{3} = [0.021, 0.432, 0.312];
C = cell(3,1);
C{1} = [0.211];
C{2} = [0.243, 0.116];
C{3} = [0.553, 0.212, 0.375];

Теперь вы можете вычислить результат, используя один cellfun (без вложенности):

A = cellfun(@minus, B, C, 'Uniform',false)
person Amro    schedule 10.11.2014
comment
Мои B{i} и C{i} состоят из массивов разного размера, но каждый раз, когда B{i} минус C{i}, они имеют одинаковый размер. Мне нужно зациклить их. Выше приведен простой пример ячейки размера 3. - person Allyson; 10.11.2014