2011-12-23 30 views
1

我有以下數據結構(存儲爲CSV):導入數值矢量和字符串到MATLAB矩陣

Sub Cond Pic Vals 
s101 A pic1 [1,3,5,1,-2,5] 
s101 A pic2 [1,-2,5,0,2,1] 
s101 B pic1 [2,4,7,0,1,-3] 
s101 B pic2 [3,-1,1,1,6,1] 
s102 A pic1 [1,7,7,3,-1,5] 
s102 A pic2 [2,8,7,0,3,-4] 

...等

我通過受試者和條件相關聯的要循環圖片1和圖片2之間的值向量。

在python中,我將它們組織爲一個字典列表,但我不確定MATLAB中類似/最優結構是什麼。在MATLAB中導入和組織這些數據的最佳方法是什麼?

回答

2

舉例來說,你可以做這樣的事情:

xp.txt:

Sub Cond Pic Vals 
s101 A pic1 [1,3,5,1,-2,5] 
s101 A pic2 [1,-2,5,0,2,1] 
s101 B pic1 [2,4,7,0,1,-3] 
s101 B pic2 [3,-1,1,1,6,1] 
s102 A pic1 [1,7,7,3,-1,5] 
s102 A pic2 [2,8,7,0,3,-4] 

MATLAB腳本:

nValue=6; %%%%% or 90 
vals=cell(1,nValue); 
[sub cond pic vals{:}]=textread('xp.txt',['%s %s %s [%f' repmat(',%f',1,nValue-1) ']'],'headerlines',1) 
vals=horzcat(vals{:}) 
for s = unique(sub)' 
    for c = unique(cond)' 
    index=(strcmp(sub,s{1})&strcmp(cond,c{1})); 
    display(['sub: ' s{1} '; cond: ' c{1} ]) 
    resu1=vals(index & strcmp(pic,'pic1'),:) 
    resu2=vals(index & strcmp(pic,'pic2'),:) 
    %%%% computation of the correlation 
    end 
end 

結果:

sub: s101; cond: A 
resu1 = 
    1  3  5  1 -2  5 
resu2 = 
    1 -2  5  0  2  1 
sub: s101; cond: B 
resu1 = 
    2  4  7  0  1 -3 
resu2 = 
    3 -1  1  1  6  1 
sub: s102; cond: A 
resu1 = 
    1  7  7  3 -1  5 
resu2 = 
    2  8  7  0  3 -4 
sub: s102; cond: B 
resu1 = 
    Empty matrix: 0-by-6 
resu2 = 
    Empty matrix: 0-by-6 

PS:

還有很多其他的可能性取決於你想要什麼

+0

有沒有什麼辦法可以避免指定值,如在textread('xp.txt','%s%s%s [%f,% F,%F,%F,%F,%F]」 ......)?我簡化了這個例子的向量;在現實中,向量中有超過90個值... – Amyunimus 2011-12-23 23:15:53

+0

好吧我編輯過。你可以用'nValue = 90'替換nValue = 6;'它應該可以工作:P – Oli 2011-12-24 00:27:43