从矩阵单元获取值无法正常工作

时间:2019-01-03 12:43:44

标签: matlab matrix cell eval

我想制作一个直方图。但是在此之前,我需要创建此直方图的参数,它是一个矩阵。

因此,我要加载191个Matlab文件,并获取由这些文件创建的每个矩阵的第一个单元格。但是,当我编写此代码时,我有一个1x173而不是1x191的矩阵,但我没有得到期望的值。

但是,所有文件均加载良好,因为当我在控制台中显示'nb'时,我具有所有预期的值。

我已经确定了问题。这是我的i。当我在加载文件之前显示它时,我具有真实的i值,但是当我执行时却有一个错误的i值。

我该怎么办?请注意,refer是加载的文件返回的矩阵。

function matrice = histo_display    

repreferenc= 'D:\MATLAB\TSA\referenc\hit';    

for i=1:1:191    
    disp([num2str(i), ':']);    
    NAMEREF = [repreferenc,num2str(i),'.ref'];    
    eval(['load ',NAMEREF,' -mat'])    
    nb = refer(1,1);    
    disp(num2str(i));    
    %disp(num2str(nb));    
    matrice(i) = nb;     
end

这是我的控制台。

>> m = histo_display   
  1:
1
  2:
2
  3:
3
  4:
4
  5:
5
  6:
  7:
12
  8:
  9:
2
  10:
2
  11:
  12:
3
  13:
  14:
2
  15:
2
  16:
3
  17:
3
  18:
  19:
7
  20:
8
  21:
4
  22:
4
  23:
2
  24:
5
  25:
7
  26:
  27:
2
  28:
12
  29:
12
  30:
6
  31:
  32:
2
  33:
  34:
10
  35:
3
  36:
  37:
2
  38:
  39:
5
  40:
5
  41:
2
  42:
2
  43:
  44:
3
  45:
  46:
2
  47:
3
  48:
2
  49:
2
  50:
  51:
4
  52:
3
  53:
  54:
2
  55:
3
  56:
9
  57:
5
  58:
12
  59:
2
  60:
2
  61:
2
  62:
5
  63:
2
  64:
2
  65:
3
  66:
2
  67:
3
  68:
2
  69:
69
  70:
7
  71:
9
  72:
9
  73:
3
  74:
5
  75:
2
  76:
6
  77:
6
  78:
2
  79:
  80:
3
  81:
3
  82:
3
  83:
4
  84:
2
  85:
3
  86:
2
  87:
4
  88:
2
  89:
3
  90:
3
  91:
3
  92:
  93:
5
  94:
8
  95:
7
  96:
4
  97:
  98:
2
  99:
12
  100:
4
  101:
2
  102:
2
  103:
35
  104:
104
  105:
4
  106:
2
  107:
2
  108:
14
  109:
7
  110:
4
  111:
3
  112:
2
  113:
3
  114:
2
  115:
2
  116:
12
  117:
4
  118:
2
  119:
2
  120:
3
  121:
2
  122:
2
  123:
2
  124:
10
  125:
2
  126:
2
  127:
3
  128:
3
  129:
5
  130:
3
  131:
5
  132:
2
  133:
  134:
3
  135:
16
  136:
3
  137:
3
  138:
2
  139:
4
  140:
2
  141:
2
  142:
3
  143:
2
  144:
2
  145:
2
  146:
2
  147:
3
  148:
2
  149:
2
  150:
  151:
2
  152:
3
  153:
16
  154:
2
  155:
6
  156:
9
  157:
2
  158:
2
  159:
2
  160:
2
  161:
2
  162:
3
  163:
2
  164:
5
  165:
7
  166:
4
  167:
4
  168:
2
  169:
  170:
15
  171:
8
  172:
172
  173:
173
  174:
2
  175:
2
  176:
2
  177:
9
  178:
3
  179:
3
  180:
2
  181:
2
  182:
  183:
2
  184:
2
  185:
3
  186:
4
  187:
2
  188:
3
  189:
2
  190:
2
  191:
16

m =

  Columns 1 through 20

     4     1     2     3     4     5     6     7     8     9     0    11     0    13    14    15     0     0     0     0

  Columns 21 through 40

     0     0     0     0     0     0     0     0     0     0     0     0     0     0    34     0     0     0     0     0

  Columns 41 through 60

     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0

  Columns 61 through 80

     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0

  Columns 81 through 100

     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0

  Columns 101 through 120

     0     0     0     9     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0

  Columns 121 through 140

     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0

  Columns 141 through 160

     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0

  Columns 161 through 173

     0     0     0     0     0     0     0     0     0     0     0     2     1

1 个答案:

答案 0 :(得分:0)

function matrice = histo_display
repreferenc= 'D:\MATLAB\TSA\referenc\hit';
j=1;
for i=1:1:191
disp([num2str(i), ':']);
NAMEREF = [repreferenc,num2str(i),'.ref'];
eval(['load ',NAMEREF,' -mat'])
nb = refer(1,1);
disp(num2str(i));
%disp(num2str(nb));
matrice(j) = nb;
j = j+1;
end

我解决了。但是,如果有人可以解释我为什么“ i”无法正常工作,那就太好了。