2015-11-29 4 views
1

как я могу взять произведение всех ячеек массива ячеек в Matlab? В моем случае у меня есть массив ячеек try_this с 125 ячейками. Каждая ячейка представляет собой матрицу 3 × 3.как взять продукт всех ячеек в массиве ячеек в matlab

Я хотел бы взять продукт над всеми этими матрицами.

Есть ли хороший способ сделать это?

+1

Взгляните на ['cellfun'] (http://se.mathworks.com/help/matlab/ref/cellfun.html). Кроме того, вы имеете в виду обычный матричный продукт или элементный продукт? – mikkola

+0

обычная матрица товар. Когда я делаю cellfun как «cellfun (prod, try_this)», я получаю сообщение об ошибке. В нем указано Недостаточно входных аргументов. – Glassjawed

+2

Спасибо за разъяснение. Извините, я просто понял, что «cellfun» не будет работать здесь, как я думал, так как вы не применяете функцию к каждой ячейке индивидуально, а скорее последовательно для каждого результата раннего умножения и следующего элемента ячейки. – mikkola

ответ

2

Это можно сделать с помощью for -loop. Далее собирает выходной кусок-на-части в массив result:

result = try_this{1}*try_this{2}; %// multiply first two cells 
for k = 3:numel(try_this) 
    result = result * try_this{k}; %// C{1}*C{2}* ... * C{k} 
end 

Edit: Как уже говорилось в комментариях ниже, векторизации такое повторное умножение матриц не является однозначным.

+0

Да, это то, что я сделал, но я пытаюсь понять, как его векторизовать, потому что есть много матриц. – Glassjawed

+0

@ Голосовали хорошо. Я оставлю этот ответ в качестве ссылки, давайте посмотрим, нападет ли кто-нибудь с крутым векторизованным решением;) – mikkola

+5

@ Модифицированное умножение матрицы таким образом, что это нелегко векторизовать. Выпишите на бумаге футляр для 3-4-5 матричных продуктов, как индексы переплетаются ... Даже если один (и я имею в виду Divakar) мог каким-то образом векторизовать его, он, вероятно, имел бы огромные издержки памяти. Другими словами: для матричного произведения из 125 матриц вам понадобится 124-uple sum ... –

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