Main Content

spfun

0이 아닌 희소 행렬 요소에 함수 적용

설명

예제

F = spfun(func,S)는 희소 행렬 S의 0이 아닌 요소에 함수 func를 적용합니다. 입력 인수 func는 하나의 입력 인수를 받는 함수에 대한 함수 핸들입니다.

이 연산은 함수 funcS의 일부 0이 아닌 요소에 대해 0을 반환하지 않는 한 원래 행렬 S의 희소성을 유지합니다.

예제

모두 축소

4×4 희소 대각 행렬을 만듭니다.

S = diag(sparse(1:4))
S = 
   (1,1)        1
   (2,2)        2
   (3,3)        3
   (4,4)        4

S의 0이 아닌 요소에 지수 함수를 적용합니다. 결과로 반환되는 행렬은 S와 동일한 희소성 패턴을 가집니다.

F = spfun(@exp,S)
F = 
   (1,1)       2.7183
   (2,2)       7.3891
   (3,3)      20.0855
   (4,4)      54.5982

spfunS의 0이 아닌 요소에만 적용되므로, S(i)가 0일 때마다 F(i)의 값은 0이 됩니다. 이는 S의 모든 요소에 함수를 적용하는 것과 다릅니다. 예를 들어, S의 모든 요소에 지수 함수를 적용하는 것과 그 결과를 비교해 보겠습니다. exp(S) 함수는 S0 요소에 대해 1을 반환합니다.

full(exp(S))
ans = 4×4

    2.7183    1.0000    1.0000    1.0000
    1.0000    7.3891    1.0000    1.0000
    1.0000    1.0000   20.0855    1.0000
    1.0000    1.0000    1.0000   54.5982

밀도가 0.02인 희소 형식의 50×50 확률 행렬을 만듭니다. 여기서 행렬은 50개의 0이 아닌 요소를 가집니다. 행렬 S의 희소성 패턴을 플로팅합니다.

rng default;
S = sprand(50,50,0.02);
spy(S)

Figure contains an axes object. The axes object with xlabel nz = 50 contains a line object which displays its values using only markers.

S의 0이 아닌 요소에 대해 2차 함수 x2+x+1을 실행합니다. spfun을 사용하여 실행된 함수는 행렬 S와 동일한 희소성 패턴을 가집니다.

fun = @(x) x.^2 + x + 1;
F = spfun(fun,S);
spy(F)

Figure contains an axes object. The axes object with xlabel nz = 50 contains a line object which displays its values using only markers.

입력 인수

모두 축소

입력 행렬입니다. 이 행렬은 항상 그렇지는 않지만 일반적으로 비희소 행렬입니다.

S가 비희소 행렬인 경우 F = spfun(func,S)S의 0이 아닌 요소에 함수 func를 적용하고 F를 희소 행렬로 반환합니다.

데이터형: double | logical
복소수 지원 여부:

입력 배열의 요소에 적용할 함수로, 함수 핸들로 지정됩니다. 함수는 S에 대해 요소별 연산을 수행해야 합니다. 함수 핸들에 대한 자세한 내용은 함수 핸들 생성하기 항목을 참조하십시오.

예: @(n) n+1

  • func가 0인 입력값에 대해 0을 반환할 경우, func(S)를 사용하면 희소 행렬 S에 대해 spfun을 호출한 것과 동일한 결과를 반환할 수 있습니다.

확장 기능

C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.

버전 내역

R2006a 이전에 개발됨