2016-07-04 3 views
0

'51 .raw ''52 .raw'... '69 .raw '까지 여러 데이터 세트가 있고이 데이터 세트를 내 코드에서 실행 한 후이 데이터 세트의 크기 375x91x223에서 다양한 y 크기 (예 : '51 .raw '출력 : 375x45x223, '52 .raw'출력 : 375x50x223, 각 데이터 세트마다 다름)로 변경됩니다.파일 이름에 데이터 세트의 크기 정보 추가하기

나중에 '.raw'파일 이름을이 정보 (예 : '51_375x45x223.raw')로 저장하고 나중에 새 데이터 세트 크기를 사용하여 내 코드에서 데이터 세트의 모양을 변경하려고합니다. 나는이 일을 시도했지만 도움이 필요했다 :

for k=51:69 

data=reshape(data,[375 91 223]); % from earlier in the code after importing data 

% then executes code with dimensions of 'data' chaging to 375x45x223, ... 

length=size(data); dimensions.([num2str(k)]) = length; %save size in 'dimensions'. 

path=['C:\Example\']; 
name= sprintf('%d.raw',k); 

write([path name], data); 
% 'write' is a function to save the dat in specified path and name (value of k). I don't know how to add the size of the dataset to the name. 

는 또한 나중에 나는이 반복에 대한 데이터 세트 '데이터'를 바꿀 새로운 Y 치수 값을 가진 모양 변경을하고 싶어합니다.

i.e. data=reshape(data,[375 new y-dimension 223]); 

귀하의 도움에 감사드립니다. 감사.

+0

이유는 단지 헤더 행에 * 파일 내부 * 크기를 저장하지? 파일 이름을 사용하여 내용에 대한 정보를 전달하는 것이 훨씬 낫습니다. – Suever

+0

의견을 보내 주셔서 감사합니다. 출력은 .raw 파일로 저장됩니다. 그런 다음 다른 소프트웨어 (ImageJ)에서 열려면 다른 사람들이 그것을 원한다면 더 편리 할 것입니다. 덧붙여서 내가 언급 한 것은 또한 생각한 것이지만 파일명을 변경하도록 요청 받았지만 어떻게해야할지 모르겠습니다. –

답변

1

치수를 파일로 저장 될 문자열로 쉽게 변환 할 수 있습니다. 말했다되고 그건

% Create a string of the form: dim1xdim2xdim3x... 
dims = num2cell(size(data)); 
dimstr = sprintf('%dx', dims{:}); 
dimstr = dimstr(1:end-1); 

% Append this to your "normal" filename 
folder = 'C:\Example\'; 
filename = fullfile(folder, sprintf('%d_%s.raw', k, dimstr)); 

write(filename, data); 

, 그것은 훨씬 더 아니라 파일 이름에 의존하지 않고 내에서 파일 자체를이 차원 정보 이 (가) 있습니다.

내부 메모 이름을 lengthpath과 같이 변수 이름으로 사용하지 마십시오. 이로 인해 향후 이상하고 예기치 않은 동작이 발생할 수 있습니다.

업데이트

당신은 파일 이름을 구문 분석해야하는 경우, 당신은 그렇게 textscan을 사용할 수

filename = '1_2x3x4.raw'; 

ndims = sum(filename == 'x') + 1; 
fspec = repmat('%dx', [1 ndims]); 
parts = textscan(filename, ['%d_', fspec(1:end-1)]); 

% Then load your data 

% Now reshape it based on the filename 
data = reshape(data, parts{2:end}); 
+0

도와 주셔서 고맙습니다. 나중에 새 y 차원 (예 : 49)을 호출하여 문자열에서 '모양을 변경'하시겠습니까? 그래서 두 번째 for 루프에 대해 'dim1xdim2xdim3'치수를 읽고 모양을 바꿔야합니다. data = reshape (data, [dim1 dim2 dim3]) –

+0

@ a.kk 차원을 다시 읽도록 업데이트 된 코드가 추가되었습니다. 파일명 – Suever

+0

고마워요 수 에버! 나는 이것을 실행하려했지만 데이터와 다른 데이터를 실행할 때 오류가 발생합니다 : '재구성 사용 중 오류가 발생했습니다. 요소의 수를 변경하려면 변경해서는 안됩니다.' –

관련 문제