function [ out ] = bsxfun( func, target, data )
%[ out ] = bsxfun( func, target, data )
%MATLABの新しいのにある、bsxfunっぽいもの。
%http://www.mathworks.co.jp/access/helpdesk_ja_JP/help/techdoc/ref/bsxfun.html
%『入力』
%func 種類
%target A
%data B
%『出力』
%out 出力
name = func2str(func);
MINUS = 0;
TIMES = 1;
RDIVIDE = 2;
LDIVIDE = 3;
PLUS = 4;
type = -1;
if strcmp(name,'plus'),
type = PLUS;
elseif strcmp(name,'minus'),
type = MINUS;
elseif strcmp(name,'times'),
type = TIMES;
elseif strcmp(name,'rdivide'),
type = RDIVIDE;
elseif strcmp(name,'ldivide'),
type = LDIVIDE;
end
%row height
%column width
[row, column] = size(target);
[height, width] = size(data);
if ((height==1)&&(width==1)),
if (type == PLUS),
out = target + data;
elseif (type == MINUS),
out = target – data;
elseif (type == TIMES),
out = target .* data;
elseif (type == RDIVIDE),
out = target ./ data;
elseif (type == LDIVIDE),
out = target .\ data;
end
else
out = zeros(row,column);
for x=1:row,
for y=1:column,
a = mod(x – 1,height) + 1;
b = mod(y – 1,width) + 1;
if (type == PLUS),
out(x,y) = target(x,y) + data(a,b);
elseif (type == MINUS),
out(x,y) = target(x,y) – data(a,b);
elseif (type == TIMES),
out(x,y) = target(x,y) * data(a,b);
elseif (type == RDIVIDE),
out(x,y) = target(x,y) / data(a,b);
elseif (type == LDIVIDE),
out(x,y) = target(x,y) \ data(a,b);
end
end
end
end
コメント