2016-07-04 4 views
0

'51 .raw ''52 .raw' ... '69 .raw 'までの複数のデータセットがあり、これらのデータセットをコード内で実行した後、これらのデータセットのサイズ375x91x223からさまざまなy-次元(つまり、'51 .raw '出力:375x45x223; '52 .raw'出力:375x50x223、各データセットで異なる)に変更されます。ファイル名へのデータセットのサイズ情報の追加

この情報( '51_375x45x223.raw')で後で '.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)を文字列から「再形成」する方法を後でどう思いますか?したがって、2番目のforループでは、 'dim1xdim2xdim3'というディメンションを読み取り、次にreshapeしたいと思っています。 –

+0

@ a.kkディメンションを読み込むためのコードをいくつか追加しました。ファイル名 – Suever

+0

ありがとう、Suever!私はこれを実行しようとしましたが、データと私が実行する他のデータでエラーが発生します: '再フォーマットを使用しているエラー 要素数を変更するには変更しないでください。 –

関連する問題