- This topic has 1개 답변, 2명 참여, and was last updated 6 years, 6 months 전에 by Kyecw.
-
글쓴이글
-
-
kmk회원
안녕하세요? 이리저리 궁리하다 답이 안나와 글 올려 봅니다.
배열에서 요소별 평균을 구하고 싶습니다.
여러개 파일일때 어떻게 해야 할지를 모르겠습니다.
[1]번처럼 하면 파일이 100개 정도로 늘어나면 넘 힘들어져서,,
[2]번처럼 하려니,,, 계산이 이상합니다. ㅠㅠ[1]
openr, 11,’C:\Users\user\Desktop\a01.dat’
openr, 12,’C:\Users\user\Desktop\a02.dat’
openr, 13,’C:\Users\user\Desktop\a03.dat’data1=dblarr(3,5)
data2=dblarr(3,5)
data3=dblarr(3,5)readf, 11 , data1
readf, 12 , data2
readf, 13 , data3
dataa= data1 + data2 + data3
dataaa = dataa/3
close, 11, 12, 13[2]
file=file_search(‘C:\Users\user\Desktop\a0*.dat’)
for i=0,2 do begin
file_input=file[i]
openr, 7, file[i]
file_input=dblarr(3,5)
readf, 7, file[i]
dataa=dblarr(3,5)
dataa= total(file_input) -
Kyecw회원
안녕하세요.
[2]번에 적어주신 코드에 대해서 몇가지 생각을 좀 해보았습니다.
우선 파일 입력과정에서 file_search를 이용해 데이터 파일을 찾으실 때, 찾는 파일을 a0*.dat로 입력하시면, a10.dat 같은 케이스는 찾을 수 없게되니 a*.dat로 입력하는 것이 좋을 것 같습니다.
보여주신 코드를 확인해 봤을 때, file이라고 하는 배열에 파일의 이름들이 들어가고, file_input이라고 하는 2차원 배열에 각 파일들의 데이터가 입력되는 것으로 보이므로 그렇게 생각하고 설명을 드리겠습니다.
코드의 구조를 살펴보면, 원하시는건 a*.dat의 데이터들을 file_input 배열에 읽어들여서, dataa라는 배열에 모든 데이터를 합쳐서 총합을 구한뒤, dataa를 파일 갯수로 나눠 평균을 구하는 것으로 추측됩니다.
그렇다면 반복문 안에 ‘dataa=dblarr(3,5)’가 있으면, 반복문이 수행되는 동안 새로운 파일을 읽을 때마다 dataa를 초기화하여 앞서 읽은 데이터가 지워지게되므로, 반복문 밖으로 ‘dataa=dblarr(3,5)’ 구문을 꺼내줄 필요가 있습니다.그리고 for 구문을 시작하실 때 ‘for i=0, 2’로 시작하셨으니 a03.dat까지의 파일만 읽어들이게 됩니다.
하지만 [1]번 케이스에서 파일이 늘어난다는 언급을 하신 것으로 보아, 데이터 파일의 갯수는 유동적인 것으로 보입니다.
따라서 그때그때 반복문 수행 부분을 수정하지않기 위해서 배열의 요소 갯수를 세어주는 n_elements 함수를 이용하여 ‘for i=0, n_elements(file)-1 do begin’으로 시작하셔서 변하는 데이터 파일의 갯수에 맞춰 반복문을 수행할 수 있게 하는 것이 편할 것입니다.그 아랫줄에 file_input = file[i]는 파일의 데이터를 입력받기 위한 file_input에 파일의 이름인 file배열의 값을 받을 이유가 없으므로 지우시면 될 것 같습니다.
readf 프로시져는 지정한 채널에 해당되는 파일의 데이터를 지정한 변수로 읽어들이는 역할을 하므로, 여기선 파일의 데이터를 읽어들이는 용도로 선언한 file_input 배열에 데이터를 읽어들이기 위해서 ‘readf,7,file[i]’ 부분은 ‘readf, 7, file_input’으로 수정하시면 됩니다.
그리고 total 함수는 주어진 배열의 모든 원소의 총합값을 구해주는 역할을 하므로 현재 목적엔 적합한 함수가 아닙니다.
따라서 ‘dataa=total(file_input)’부분은 읽어들인 a*.dat의 데이터를 모두 합치기 위해 ‘dataa = dataa + file_input’으로 수정해야할 것입니다.마지막으로, openw나 openr을 이용해 파일을 열었으면 close를 이용해 파일을 닫아주셔야하고, 반복문의 끝부분에 endfor를 추가하시면 됩니다.
위와 같이 수정하신 뒤에 dataa를 파일의 총 갯수인 n_elements(file)로 나눠주시면 원하시는 각 요소별 평균을 구할 수 있을 것입니다.
-
-
글쓴이글