/* -*- MaTX -*- * * 【名前】 * median() - 全ての成分の中間値 * * 【形式】 * x = median(X) * (Real |Complex |Polynomial|Rational) x; * (Matrix|CoMatrix|PoMatrix |RaMatrix) X; * * x = median(X) * (Real |Complex|Polynomial|Rational) x * (Array|CoArray|PoArray |RaArray ) X; * * x = median(X) * Integer x; * Index X; * * 【機能説明】 * median(X)は,全ての成分の中間値を求める。 * * 【例題】 * median([1 2 3 4 5]) = 3 * * 【関連項目】 * sum(), std(), mean(), median_row(), median_col() * * ------------------------------------------------------------------------ * * 【名前】 * median_col() - 列毎の成分の中間値 * * 【形式】 * Y = median_col(X) * (Matrix|Array|Index) Y; * (Matrix|Array|Index) X; * * 【機能説明】 * median_col(X)は,列毎に成分の中間値を求め,行ベクトルを返す。 * * X が列ベクトルまたは行ベクトルのとき,median_col(X) は * 全ての成分の中間値を求める。 * * 【例題】 * Y = median_col([[1 2][3 4][5 6]]) * === [Y] : ( 1, 2) === * ( 1) ( 2) * ( 1) 3.00000000E+00 4.00000000E+00 * * Y = median_col([1 2 3]) * === [Y] : ( 1, 1) === * ( 1) * ( 1) 2.00000000E+00 * * 【関連項目】 * median(), median_row() * * ------------------------------------------------------------------------ * * 【名前】 * median_row() - 行毎の成分の中間値 * * 【形式】 * Y = median_row(X) * (Matrix|Array|Index) Y; * (Matrix|Array|Index) X; * * 【機能説明】 * median_row(X)は,行毎に成分の中間値を求め,列ベクトルを返す。 * * X が列ベクトルまたは行ベクトルのとき,median_row(X) は * 全ての成分の中間値を求める。 * * 【例題】 * Y = median_row([[1 2 3][4 5 6]]) * === [Y] : ( 2, 1) === * ( 1) * ( 1) 2.00000000E+00 * ( 2) 5.00000000E+00 * * Y = median_row([[1][2][3]]) * === [Y] : ( 1, 1) === * ( 1) * ( 1) 2.00000000E+00 * * 【関連項目】 * median(), median_col() */ Func Real median(x) Matrix x; { Matrix y; y = median_col(x); if (length(y) == 1) { return y(1,1); } else { return [median_col(y)](1,1); } } Func Matrix median_col(x_) Matrix x_; { Integer i,m,n; Matrix x,y,xx; x = x_; {m,n} = size(x); if (m == 1) { // 行ベクトル {x} = sort(x); if (rem(n,2)) { // n は奇数 y = [x((n+1)/2)]; } else { // n は偶数 y = [(x(n/2) + x(n/2+1))/2]; } } else { for (i = 1; i <= n; i++) { {xx} = sort(x(:,i)); x(:,i) = xx; } if (rem(m,2)) { // m は奇数 y = x((m+2)/2,:); } else { // m は偶数 y = (x(m/2,:) + x(m/2+1,:))/2; } } return y; } Func Matrix median_row(x) Matrix x; { return trans(median_col(trans(x))); }