在MATLAB中循环存储值

时间:2018-10-23 11:45:44

标签: matlab for-loop matrix

我之前也问过类似的问题,

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等行中,而其他所有行都包含零。

2 个答案:

答案 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。