KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I'm using cells to manage data in some stuff I'm working on. I'd like to be able to do things like: 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 ); However, I don't want the extremely verbose syntax to do it. It seems a bit overboard to create a new class for this when all I want to do is provide a definition for math operators on cells. The question: Is a class the only way to go about it? If I write a class to do this, it certainly makes it easier to write the code. The biggest negatives I see are related to optimizations, though there's a few other things that bug me about it.. Any optimizations going on behind the scenes (eg, when Jacket compiles something to run on a GPU) would potentially have a harder time determining what optimizations to make. As an example, suppose I have two cells (A,B) containing a number of matrices of appropriate dimension. If I write code to produce a new cell: Z = c1*A + c2*B ... with scalars {c1,c2}, I can write it in such a way that Jacket (or whatever) will easily determine that it should do the calculations as: Z{kk} = c1*A{kk} + c2*B{kk} or perhaps an even better optimization than that. Otherwise. it may end up with something slower and/or less memory efficient, eg: temp1 = cellfun( @(X)( c1*X ), A ); temp2 = cellfun( @(X)( c2*X ), B ); Z = cellfun( @plus, temp1, temp2 );
Tags (comma-separated)
Save Edits
Cancel