将数值向量和字符串导入MATLAB矩阵

时间:2011-12-23 20:59:18

标签: matlab csv vector structure import

我有以下数据结构(存储为CSV):

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]  

...等

我想循环通过主题和条件来关联pic1和pic2之间的值向量。

在python中,我将这些组织为字典列表,但我不确定MATLAB中的类似/最优结构是什么。在MATLAB中导入和组织这些数据的最佳方法是什么?

1 个答案:

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

根据您的需要,还有许多其他可能性