Matlab 从矩阵单元格中获取值不';我不能正常工作

Matlab 从矩阵单元格中获取值不';我不能正常工作,matlab,matrix,cell,eval,Matlab,Matrix,Cell,Eval,我想做一个柱状图。但在此之前,我需要创建这个直方图的参数,它是一个矩阵 所以我有191个Matlab文件要加载,并得到由这些文件创建的每个矩阵的第一个单元。但是当我写这段代码时,我有一个1x173的矩阵,而不是1x191,我没有得到预期的值 但是,所有文件都加载良好,因为当我在控制台中显示'nb'时,我有所有预期值 我已经确定了问题所在。这是我的i。当我在加载文件之前显示它时,我有真实的I值,但当我在有错误的I值之后显示它时 我该怎么办?请注意,refere是加载的文件返回的矩阵 functio

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

所以我有191个Matlab文件要加载,并得到由这些文件创建的每个矩阵的第一个单元。但是当我写这段代码时,我有一个1x173的矩阵,而不是1x191,我没有得到预期的值

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

我已经确定了问题所在。这是我的
i
。当我在加载文件之前显示它时,我有真实的
I
值,但当我在有错误的
I
值之后显示它时

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

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

我解决了。但是如果有人能解释为什么这个“我”不能正常工作,那就太好了。

你应该这样做,它们被定义为假想单位。你也应该。在这种情况下,只需按设计使用
load
,使用
eval
-
load(NAMEREF,'-mat')
是没有意义的。将负载分配给某个对象,使其更易于调试,因为您从不清除
reference
<代码>温度=负载(名称参考,'-mat')。现在调试(您需要
temp.reference
)。而且
j
总是等于
i
,在这里,为什么要用
j
?Ty作为你的答案呢。我使用j是因为“I”没有像我指出的那样正确地递增。它就像是1234512。。。。我不知道为什么。可能是因为那个评估。
i
不可能不按预期增加。您的问题不可复制,发布a或我们无法帮助您查看我的控制台吗?请看。我显示了相同的I 2次。比较一下看。现在的问题是为什么?为什么我错了?我知道这是难以置信的。但这就是我发布它的原因。您没有提供我们可以运行以重现问题的代码,因此无法对意外行为提出建议。您需要在每次迭代中查看
i
的值。很明显,它的增量是正确的,因为它第一次显示时是正确的。您也可以只执行
disp(i)
,以消除
num2str
可能产生的任何影响。
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