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

ользую клетки для управления данными в некоторых вещах, над которыми я работаю. Я хотел бы иметь возможность делать такие вещи, как:

A = cellfun( @(X)( randn( 5,5 ) ), cell( 5,1 ), 'UniformOutput', 0 );
B = cellfun( @(X)( randn( 5,5 ) ), cell( 5,1 ), 'UniformOutput', 0 );
%#
%# Each of the following would fail if cell member dimensions
%# don't match up
%#
%# matrix sums for each cell entry
%# C = A + B;
C = cellfun( @(X,Y)( X + Y ), A, B, 'UniformOutput', 0 );
%#
%# direct/hadamard product
%# D = A .* B;
D = cellfun( @(X,Y)( X .* Y ), A, B, 'UniformOutput', 0 );
%#
%# matrix-matrix products (not across all entries)
%# E = A * B;
E = cellfun( @(X,Y)( X * Y ), A, B, 'UniformOutput', 0 );

Тем не менее, я не хочу, чтобы чрезвычайно подробный синтаксис делал это. Создание нового класса для этого кажется слишком сложным, когда все, что я хочу сделать, это предоставить определение математических операторов в ячейках.

Вопрос: является ли класс единственным способом сделать это?

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

Любая оптимизация, происходящая за кулисами (например, когда Jacket компилирует что-то для запуска на графическом процессоре), потенциально будет сложнее определить, какие оптимизации следует выполнить. В качестве примера, предположим, у меня есть две ячейки (A, B), содержащие несколько матриц соответствующего размера. Если я напишу код для создания новой ячейки:

Z = c1*A + c2*B

... со скалярами {c1, c2} я могу написать это так, чтобы Jacket (или любой другой) легко определил, что он должен выполнять вычисления следующим образом:

Z{kk} = c1*A{kk} + c2*B{kk}

или, возможно, даже лучшая оптимизация, чем эта. В противном случае. это может привести к чему-то более медленному и / или менее эффективному использованию памяти, например:

temp1 = cellfun( @(X)( c1*X ), A );
temp2 = cellfun( @(X)( c2*X ), B );
Z     = cellfun( @plus, temp1, temp2 );

Предполагая, что MATLAB или Jacket не могут оптимизировать его, это приведет к использованию слишком большого количества памяти.

Ответы на вопрос(1)

Ваш ответ на вопрос