【发布时间】:2018-09-08 10:37:07
【问题描述】:
我有一个如下的行矩阵
a=[1 2 3];
for 循环实现如下
for i=1:a(1,1:size(a,2))
disp(i);
disp("Hello");
end
根据行矩阵的值,Hello 必须打印 6 次(即 1+2+3),但它只打印一次。如何沿行矩阵迭代并打印 6 次 Hello?
【问题讨论】:
标签: arrays matlab for-loop matrix
我有一个如下的行矩阵
a=[1 2 3];
for 循环实现如下
for i=1:a(1,1:size(a,2))
disp(i);
disp("Hello");
end
根据行矩阵的值,Hello 必须打印 6 次(即 1+2+3),但它只打印一次。如何沿行矩阵迭代并打印 6 次 Hello?
【问题讨论】:
标签: arrays matlab for-loop matrix
a=[1 2 3];
for ii=1:sum(a)
disp("Hello")
end
1:a(1,1:size(a,2)) == 1:a(1,[1 2 3]) == 1:a(1,1) == 1:1 == 1 实际上创建了一个包含数字1 的数组(更具体地说:a(1),因为1:[1 2 3] 将评估为1:1,丢弃向量中进一步的所有元素)。鉴于你提到的数字 6,我认为你想要 a 中所有元素的 sum,它由 sum 给出。
最后的警告:请不要使用i 和j 作为变量名,as they also denote the imaginary unit。
阅读您的评论,您可能需要一个嵌套循环,因为 a 的条目可能不会单调增加:
k = 1; % counter to show which iteration you're in
for ii = 1:numel(a) % for all elements of a do
for jj = 1:a(ii) % do the following a(ii) times
disp('Iteration %d', k)
disp('Hello')
k = k+1; % increase iteration count
end
end
请注意,当a 不包含严格的非负整数值时,这两种方法都会失败(显然)。
【讨论】:
sum(a) 上进行迭代。我看不出这种情况有什么问题?