Векторизация конкатенации бинарных операций - PullRequest
3 голосов
/ 11 октября 2011

Скажем, у меня есть массив ячеек, который содержит стек логических матриц, например,

matrices = 
    [225x400 logical]
    [225x400 logical]
    ....
    [225x400 logical]

Массив ячеек может потенциально содержать сотни матриц.

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

т.е.

result = matrices{1} & matrices{2} & matrices{3} & ..., etc.

Мой вопрос: Можно ли сделать это без зацикливания?И если да, то есть ли какое-либо преимущество в векторизации этого вычисления MATLAB?

Что если стек матриц представлен в виде трехмерного массива (вместо массива ячеек?), Например:

  Name                        Size                  

  matrices                  225x400x100

Есть ли какая-то польза в том, чтобы хранить эти типы стеков в виде массивов ячеек по сравнению с трехмерными матрицами?(чтобы уточнить, в этом последнем примере мы вычислили бы матрицы AND из 100, каждая из которых имеет размер 225x400).

PS: Мне интереснов растворах до AND, XOR и OR

1 Ответ

4 голосов
/ 11 октября 2011

Вы не можете выполнять векторизованные вычисления для массивов ячеек. Вы должны преобразовать его в 3D-массив (используя cell2mat) или, что еще лучше: предварительно выделить 3D-массив.

Тогда, с размерами 225x400x100 вы можете сделать:

или

any(matrices,3)

и

all(matrices,3)

исключающее:

mod( sum(matrices, 3), 2)

Преимущество массивов ячеек заключается в сохранении памяти (например, после удаления ячейки). Когда ваш массив ячеек станет стабильным, вы должны превратить его в матрицу для векторизованных вычислений, которая намного быстрее, чем циклы Matlab.

...