|
a |
|
b/functions/@mmo/binaryopp.m |
|
|
1 |
function obj3 = binaryopp(f, obj1, obj2) |
|
|
2 |
|
|
|
3 |
if isa(obj2, 'mmo'), tmpobj = obj2; obj2 = obj1; obj1 = tmpobj; clear tmpobj; end |
|
|
4 |
if ~isequal(size(obj1), size(obj2)) && prod(size(obj2)) ~= 1 |
|
|
5 |
error('Matrix dimensions must agree.'); |
|
|
6 |
end |
|
|
7 |
data1 = memmapfile(obj1.dataFile, 'writable', obj1.writable, 'format', { 'single' obj1.dimensions 'x' }); |
|
|
8 |
if isa(obj2, 'mmo'), |
|
|
9 |
data2 = memmapfile(obj2.dataFile, 'writable', obj2.writable, 'format', { 'single' obj2.dimensions 'x' }); |
|
|
10 |
else data2 = obj2; |
|
|
11 |
end |
|
|
12 |
|
|
|
13 |
% make new memory mapped data file (blank) |
|
|
14 |
% -------------------------------- |
|
|
15 |
newFileName = mmo.getnewfilename; |
|
|
16 |
fid = fopen(newFileName, 'w'); |
|
|
17 |
s1 = size(obj1); |
|
|
18 |
ss.type = '()'; |
|
|
19 |
ss.subs(1:length(s1)-1) = { ':' }; |
|
|
20 |
for index = 1:s1(end) |
|
|
21 |
ss.subs{length(s1)} = index; |
|
|
22 |
if prod(size(data2)) == 1 |
|
|
23 |
tmpdata = f(subsref(data1.Data.x, ss), data2); |
|
|
24 |
else tmpdata = f(subsref(data1.Data.x, ss), subsref(data2.Data.x, ss)); |
|
|
25 |
end |
|
|
26 |
fwrite(fid, tmpdata, 'float'); |
|
|
27 |
end |
|
|
28 |
fclose(fid); |
|
|
29 |
|
|
|
30 |
% create object |
|
|
31 |
% ------------- |
|
|
32 |
obj3 = mmo(newFileName, s1, true, obj1.transposed); |
|
|
33 |
obj3 = updateWorkspace(obj3); |