본문 바로가기
programming language/MATLAB

MATLAB String evaluation, eval()

by 남성 2010. 1. 17.

MATLAB 다양한 능력중에 string evaluation 관련한 함수인 eval 이용해 보자. 가령 아래와 같은 예를 수행해 보고 싶은 경우가 있다.  

A1 이라는 변수에는 1행 1열의 uniform sample 을 저장하고
A2 이라는 변수에는 2행 2열의 uniform sample 을 저장하고
A3 이라는 변수에는 3행 3열의 uniform sample 을 저장하고
…. A100 이라는 변수에는 100 행 100 열의 uniform sample 을 저장하고 싶다고 해보자. 

뭐 변수가 한 두개라면 그냥 몇줄 쓰면 되니 그리 문제될게 없지만, 이 경우처럼 100 개나 되는 변수에 저 값들을 일일이 할당한다는건 비효율 적이라는건 누구나 알 수 있다. 이런 경우 eval() 함수를 이용하면 너무나 간단히 위 문제가 해결 된다.  

for n = 1:100
       eval(['A' num2str(n) ' = rand(n)'])
end  

위 코드가 다다 너무나 간단하다 ㅋㅋ
workspace에 보면 A1~A100 의 변수가 생긴걸 확인 할 수 있을 것이다. 위 코드 중에 num2str 함수는 숫자를 문자로 바꿔주는 함수이고 rand 함수는 0~1 사이의 uniform random variable 을 n 행 n 열로 생성하는 함수이다.

댓글4

  • 우웅v 2012.02.10 02:05

    for n=1:10
    eval(['A' num2srt(n) ' = rand(n)'])
    end

    Undefined function 'num2srt' for input arguments of type
    'double'.

    이렇게 하면 에러가나는데 뭐가 문제인지 혹시 아시나요...?

    답글

  • 남성 2012.02.10 08:49 신고

    타이핑 실수네요.

    num2srt() 라는 함수는 없습니다.

    num2str() 로 바꿔 주시면 됩니다.

    답글

  • 초보자 2012.12.26 16:16

    한가지 질문 해도될까요..?
    eval 함수를 사용해서 변수에 데이터를 저장하셨잖아요
    그럼 저 데이터가 들어간 변수를 하나의 cell에 저장할 수는 없는건가요?
    저도 비슷하게 eval 함수를 사용하는데
    하나의 cell에 데이터가 들어간 변수를 넣는게 힘들어서요 ㅠ
    답글

    • 남성 2012.12.27 06:43 신고

      eval 을 이용해서 cell 에도 저장을 할 수 있습니다.

      질문의 의도를 정확히 이해한건진 모르겠지만 다음과 같이 저장할 수 있을것 같습니다.

      A={};
      for n = 1:100
      eval(['A{' num2str(n) '} = rand(n)'])
      end

      위와 같이 코딩하면

      A{1}, A{2}, .... A{100} 에 값들이 저장됩니다.