2010-05-08 32 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

相關問題