2010-05-08 86 views
0

我有一个38行和7130列的微阵列数据。我正在尝试读取数据但保持上述错误。错误:尝试访问数据(2,:);索引越界,因为大小(数据)= [1,7129]

我调试并发现,当我读取数据时,我有1x7129而不是38x7130。我不知道为什么。我的第7130列包含字母,而其余数据是数字。任何想法为什么发生这种情况?


我的文件是分隔的文本选项卡,这里是我的代码读取文件:

clear; 
fn=32; 
col=fn+1; 
cluster=2; 
num_eachClass=3564; 
row=num_eachClass*cluster; 
fid1 = fopen('data.txt', 'r'); 
txt_format=''; 
for t=1:col txt_format=[txt_format '%g ']; 
end 
data = fscanf(fid1,txt_format,[col row]); 
data = data'; fclose(fid1); 
+1

您的文件格式,更重要的是你怎么看这些数据?显示你的代码和一些数据样本。 – yuk 2010-05-08 00:11:40

回答

0

试试这个代码来读取数据:

filename = 'yourfilename.txt'; 
fid = fopen(filename,'r'); 

% If you have a line with column headers use those 3 lines. Comment if not. 
colnames = fgetl(fid); 
colnames = textscan(colnames, '%s','delimiter','\t'); 
colnames = colnames{:}; 

% Reading the data 
tsformat = [repmat('%f ',1,7129) '%s']; 
datafromfile = textscan(fid,tsformat,'delimiter','\t','CollectOutput',1); 
fclose(fid); 

% Get the data from the cell array  
data = datafromfile{1}; 
labels = datafromfile{2}; 

编辑 要分开您的数据集训练和测试,做一些像这样的:

train_samp = 1:19; 
test_samp = 20:38; 
train_data = data(train_samp,:); 
test_data = data(test_samp,:); 
train_label = labels(train_samp); 
test_label = labels(test_samp); 

您也可以单独样本随机:

samp_num = size(data,1); 
test_num = 19; 
randorder = randperm(samp_num); 
train_samp = randorder(test_num+1:samp_num); 
test_samp = randorder(1:test_num); 

我没有做换位data = data';。 如果您需要,只需切换行和列的索引在上面的代码:

train_data = data(:,train_samp); 
test_data = data(:,test_samp); 
+0

我用你的代码,但有错误:索引超过矩阵尺寸。 – Mola 2010-05-08 18:17:17

+0

请在下面查看我对您的代码的评论,并在此处进行更新。 – yuk 2010-05-08 23:27:13