我之前也问过类似的问题,
Double for loop in MATLAB, storing the information
我正在存储for循环的结果,但是这次我的for循环号每次都不会增加1。
%%
for q = [25,50,100,250,500,5000]
ActualTable(:,q)=ActualValues;
end
您将看到这段代码运行了,但是它在矩阵ActualTable
中有很大一部分行,这些行只包含0
,就像包含非零的行一样。因此,它会将每一行从25保存到5000,并且仅将我的值插入25, 50, 100
等行中,而其他所有行都包含零。
答案 0 :(得分:4)
for q = [25,50,100,250,500,5000]
ActualTable(:,q)=ActualValues;
end
这表示MATLAB应该在q
上循环,其中q
有六个可能的值。如果为q=25
,则内部调用将在ActualValues
列中存储q
,正如刚刚所说的,该列为25。因此,当然使用此q
数组,您会得到一个{{ 1}} -by- N
矩阵,因为您尝试存储的最后一列是5000,因此MATLAB不会在矩阵中使用Swiss Cheese。
相反,循环遍历单调递增的索引:
5000
通过这种方式,您从for ii = 1:numel(q)
ActualTable(ii,:) = ActualValues(q(ii),:); % You said rows, let's use rows then
end
起只有6行,并从numel(q)=6
中基于ii
的第q
个值来获取数据。
答案 1 :(得分:0)
我假设您显示的方式是ActualValues每次只是1个值。您的代码的问题是q的增量不是1。解决方案是每次在末尾附加该值或使用一个计数器。
追加:
ActualTable = [];
for q = [25,50,100,250,500,5000]
ActualTable(end+1)=ActualValues;
end
计数:
ActualTable = [];
c = 1;
for q = [25,50,100,250,500,5000]
ActualTable(c)=ActualValues;
c = c+1;
end
请注意,每次更改数组的长度都不是一种好的编码习惯。如果您知道将要有多少个最终值,则应使用该长度实例化ActualTable。