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