2016-07-04 82 views
0

我有几个数据集,名为'51.raw''52 .raw'... until '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

感谢您的评论Suever,输出保存为.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

谢谢Suever的帮助。您如何回忆新的y维度(例如49)以从字符串“重塑”?因此,对于第二个循环,我希望它读取尺寸'dim1xdim2xdim3',然后重塑:data = reshape(data,[dim1 dim2 dim3]) –

+0

@ a.kk添加了一些更新后的代码以读取尺寸文件名 – Suever

+0

谢谢Suever!我试过运行这个,但是我得到了一个错误,我运行了我的数据和其他数据:'使用重整的错误 重新设置元素的数量不能改变。' –