错误:尝试访问数据(2,:);索引越界,因为大小(数据)= [1,7129]

时间:2010-05-08 00:00:53

标签: matlab visualization

我有38行和7130列的微阵列数据。我正在尝试读取数据,但仍然存在上述错误。

我调试并发现当我读取数据时,我有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 个答案:

答案 0 :(得分: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);