난 아래와 같은 변수들이 있다.
a1=[1,2,3];
a2=[4,5,6];
a3=[7,8,9];
매트랩 에티더에서 a1이라고 type 하면
>> a1=[1,2,3];
a2=[4,5,6];
a3=[7,8,9];
>> a1
a1 =
1 2 3
내가 고민하는 변수는 1000개가 넘고, 이들을 일일이 불러서 가령 평균값을 구한 후 저장을 해야 한다. 따라서 수작업은 불가능하다. 나는 자동으로 변수명을 생성한 후 이를 해결하고자 했다.
Total=zeros(3,1);
for i=1:3
idx=sprintf('a%d',i)
mmm=mean(idx)
Total(i,1)=mmm
end
idx = 'a3'
mmm = 74
Total =
73.0000
73.5000
74.0000
Loop은 돌아갔는데, 결과값이 엉뚱하다. 2,5,8이 평균값인데 73,74,75가 평균값이란다.... 어느ㄹ나라에서 온 숫자인지...
원인은 idx=a1이 아닌 idx='a1' ,즉 변수명이 아닌 문자 a1으로 인식을 하고 있어서 이다.
따라서 single quotation을 제거하고, 문자를 변수명으로 인식하게 하는 절차가 필요하다.즉, eval()함수가 필요하다
Total=zeros(3,1);
for i=1:3
idx=sprintf('a%d',i)
idx=eval(idx)
mmm=mean(idx)
Total(i,1)=mmm
end
idx = 'a3'
idx = 7 8 9
mmm = 8
Total =
2
5
8
첫번째 idx는 'a3' 로 이해했지만, eval()로 수정한 두번째 idx는 이를 변수명으로 인식하고 7,8,9를 불러왔고, 이들의 평균인 mmm도 8로 계산되었다. 그리고 전체적인 loop결과도 2,5,8 로 정확한 값을 주고 있음을 알 수 있다.
어제 오전부터 시작한 코딩작업이 100개정도의 샘플데이터로 돌리면 잘돌아 갔는데, 3만개나 되는 실제데어터를 돌리니 여러문제가 발생했다. RAM문제도 포함해서. 여러 난관에 부딪치며, 밤늦게까지 코딩작업을 하다가 한계점에 도달한 시점인 11시에 위의 에러를 추가적으로 발견하고, 오늘 아침에 결국 해결했다. 머리가 참 많이 빠졌다.