bsxfun

암시적 확장(Implicit Expansion)이 가능한 두 배열에 요소별 연산 적용

설명

예제

C = bsxfun(fun,A,B)는 함수 핸들 fun으로 지정된 요소별 이항 연산을 배열 A와 배열 B에 적용합니다.

예제

모두 축소

열 평균값을 행렬 A의 대응하는 열 요소에서 뺍니다. 그런 다음 표준편차로 정규화합니다.

A = [1 2 10; 3 4 20; 9 6 15];
C = bsxfun(@minus, A, mean(A));
D = bsxfun(@rdivide, C, std(A))
D = 3×3

   -0.8006   -1.0000   -1.0000
   -0.3203         0    1.0000
    1.1209    1.0000         0

MATLAB® R2016b 이상에서는 연산자가 서로 호환되는 크기를 갖는 배열의 암시적 확장을 독립적으로 지원하므로 bsxfun 대신 연산자를 직접 사용할 수 있습니다.

(A - mean(A))./std(A)
ans = 3×3

   -0.8006   -1.0000   -1.0000
   -0.3203         0    1.0000
    1.1209    1.0000         0

열 벡터의 요소와 행 벡터의 요소를 비교합니다. 그 결과로 두 벡터 요소들의 각 조합에 대한 비교 값이 포함된 행렬이 반환됩니다. A > B를 사용하면 이 연산을 실행한 것과 동일한 결과를 얻을 수 있습니다.

A = [8; 17; 20; 24]
A = 4×1

     8
    17
    20
    24

B = [0 10 21]
B = 1×3

     0    10    21

C = bsxfun(@gt,A,B)
C = 4x3 logical array

   1   0   0
   1   1   0
   1   1   0
   1   1   1

함수 f(a,b)=a-eb를 나타내는 함수 핸들을 만듭니다.

fun = @(a,b) a - exp(b);

bsxfun을 사용하여 이 함수를 벡터 a와 벡터 b에 적용합니다. bsxfun 함수는 벡터를 동일한 크기의 행렬로 확장하며, 이는 입력값의 여러 조합에 대해 fun을 실행할 수 있는 효율적인 방법입니다.

a = 1:7;
b = pi*[0 1/4 1/3 1/2 2/3 3/4 1].';
C = bsxfun(fun,a,b)
C = 7×7

         0    1.0000    2.0000    3.0000    4.0000    5.0000    6.0000
   -1.1933   -0.1933    0.8067    1.8067    2.8067    3.8067    4.8067
   -1.8497   -0.8497    0.1503    1.1503    2.1503    3.1503    4.1503
   -3.8105   -2.8105   -1.8105   -0.8105    0.1895    1.1895    2.1895
   -7.1205   -6.1205   -5.1205   -4.1205   -3.1205   -2.1205   -1.1205
   -9.5507   -8.5507   -7.5507   -6.5507   -5.5507   -4.5507   -3.5507
  -22.1407  -21.1407  -20.1407  -19.1407  -18.1407  -17.1407  -16.1407

입력 인수

모두 축소

적용할 이항 함수로, 함수 핸들로 지정됩니다. fun은 호환되는 크기의 배열 A와 배열 B를 받는 C = fun(A,B) 형식의 이항(2-입력값) 요소별 함수여야 합니다. 자세한 내용은 기본 연산에 대해 호환되는 배열 크기 항목을 참조하십시오. fun은 스칼라 확장을 지원해야 합니다. 그래야만 A 또는 B가 스칼라인 경우 다른 입력 배열의 요소 각각에 해당 스칼라를 적용시키고 C를 결과로 반환할 수 있습니다.

MATLAB® R2016b 이상에서, 다음 표에 나열된 내장 이항 함수는 암시적 확장을 독립적으로 지원합니다. 이러한 함수를 사용하면 bsxfun을 사용하지 않고도 함수나 연산자를 직접 호출할 수 있습니다. 예를 들어, C = bsxfun(@plus,A,B) 대신 A+B를 사용할 수 있습니다.

함수기호설명
plus

+

플러스

minus

-

마이너스

times

.*

배열 곱하기

rdivide

./

우측 배열 나누기

ldivide

.\

좌측 배열 나누기

power

.^

배열 거듭제곱

eq

==

같음

ne

~=

같지 않음

gt

>

보다 큼

ge

>=

보다 크거나 같음

lt

<

보다 작음

le

<=

보다 작거나 같음

and

&

요소별 논리 AND

or

|

요소별 논리 OR

xor

해당 사항 없음

논리 배타적 OR

max

해당 사항 없음

이진 최댓값

min

해당 사항 없음

이진 최솟값

mod

해당 사항 없음

나눗셈의 나머지(Modulus)

rem

해당 사항 없음

나눗셈의 나머지

atan2

해당 사항 없음

4사분면 역탄젠트(결과값 단위: 라디안)

atan2d

해당 사항 없음

4사분면 역탄젠트(결과값 단위: 도)

hypot

해당 사항 없음

제곱의 합의 제곱근

예: C = bsxfun(@plus,[1 2],[2; 3])

데이터형: function_handle

입력 배열로, 스칼라, 벡터, 행렬, 다차원 배열 중 하나로 지정됩니다. 입력 인수 AB는 서로 호환되는 크기를 가져야 합니다. 자세한 내용은 기본 연산에 대해 호환되는 배열 크기 항목을 참조하십시오. A 또는 B의 차원이 한원소(Singleton)인 경우(1인 경우) bsxfun은 항상 다른 배열의 차원에 맞추어 배열을 가상으로 복제합니다. A 또는 B의 차원이 한원소이고 다른 배열의 대응하는 차원이 0인 경우 bsxfun은 가상으로 한원소 차원을 0으로 축소합니다.

데이터형: single | double | uint8 | uint16 | uint32 | uint64 | int8 | int16 | int32 | int64 | char | logical
복소수 지원 여부:

  • 많은 경우에 bsxfun을 암시적 확장을 지원하는 함수와 연산자에 대한 직접 호출로 바꾸는 것이 좋습니다. 암시적 확장은 bsxfun을 사용할 때에 비해 실행 속도가 빠르고 메모리 사용률이 효율적이며 코드의 가독성을 개선합니다. 자세한 내용은 기본 연산에 대해 호환되는 배열 크기 항목을 참조하십시오.

확장 기능

참고 항목

|

R2007a에 개발됨