No BSD License  

Highlights from
Outer Operation

4.25

4.2 | 4 ratings Rate this file 6 Downloads (last 30 days) File Size: 1.24 KB File ID: #8370

Outer Operation

by Murphy O'Brien

 

25 Aug 2005 (Updated 01 Jun 2007)

e.g. Outer Product, Outer Sum, Outer Equals etc...

| Watch this File

File Information
Description

Calculates resultant matrix when the OPERATOR is applied to all combinations of the elements of vector A and the elements of vector B e.g. the outer product of A and B is outerop(A,B,'*'), the outer sum of A and B is outerop(A,B,'+')

If OPERATOR is omitted '+' is assumed

This function is equivalent to the APL language's circle.dot operation. e.g. in APL Ao.*B is the outer product of A and B % and Ao.+B is the outer sum.

Ideally, it would work on matrices but in practice
I've only ever needed to use it with vectors.

MATLAB release MATLAB 7 (R14)
Tags for This File  
Everyone's Tags
Tags I've Applied
Add New Tags Please login to tag files.
Comments and Ratings (4)
28 Aug 2005 urs (us) schwarz

nowadays one could replace the switchyard with this more versatile approach

% start of code
% now, instead of comparing all possible ops

     fop=str2func(operator);
     y=fop(outera,outerb);

% eg,
     fop=str2func('+')
% fop=@plus

profiling both versions shows that there is no penalty in speed between the hand-coded and the function-handle code

just a thought
us

21 Jul 2006 Keith Bonin

Only works on vectors.

13 Sep 2006 Zeke Cummings

I love outerop and suggest it be part of the next MATLAB release. Murphy told me, " it works with any diadic function e.g. like this outerop(1:5, 6:-1:1, 'max')".

09 Nov 2006 Matthew Dowle

I only had a quick look. Isn't this going to be slow for large vectors. It does "*ones()" which will repeat the vector over and over again in memory. It does this "*ones()" for both vectors. Isn't this innefficient, it will be slow and use too much memory. Does matlab have an efficient outer() function which does a nested for() loop through the vectors, without bloating them in memory first, and then populate the result matrix, which is the only memory required that large. Does such an efficient function exist?

Please login to add a comment or rating.
Updates
29 Aug 2005

Updated help. Added some more common operators to non-eval version.

29 Aug 2005

Applied <us>'s suggestion to make it neater and faster (faster at least for non-enumerated operators) by using new functionality of str2func in R14. Still works in R12, but the old way.
R14 users can tidy it up by deleting the pre-R14 method.

01 Jun 2007

Removed comaptibility with pre R14 releases becuase TMW have changed the way they reort version numbers. Made + the default operation.

Tag Activity for this File
Tag Applied By Date/Time
outer product Murphy O'Brien 22 Oct 2008 07:56:42
outer sum Murphy O'Brien 22 Oct 2008 07:56:42
circledot Murphy O'Brien 22 Oct 2008 07:56:42
miscellaneous Murphy O'Brien 22 Oct 2008 07:56:42
utilities Murphy O'Brien 22 Oct 2008 07:56:42

Contact us at files@mathworks.com