我有以下代码:
clear; clc;
a = [1,2,3,4,3];
b = zeros(1,5);
for i = 1:4
for j = i+1:5
if a(i) == a(j)
b = [b,i];
end
end
end
b
b
是一个数组,由双 for
循环内的元素串联而成。即使我声明了数组 b = Zeros(1,5)
,MATLAB
仍警告我需要预先分配 b
。我应该如何修改代码,以便 MATLAB
停止警告我进行预分配?
最佳答案
问题是连接步骤b = [b, i]
会将追加 i
到b
,所以您只需将数字放在零矩阵之后即可。您想要的是分配给 b
的特定元素,例如 b(???)=i
,该 ???
需要去为了最简单的是保留一个单独的计数器变量。
clear; clc;
a = [1,2,3,4,3];
b = zeros(1,5);
counter = 1;
for i = 1:4
for j = i+1:5
if a(i) == a(j)
b(counter) = i;
counter = counter + 1;
end
end
end
b
请注意,在此示例中您需要过度分配 b
因为您实际上并不预先知道它最终会有多少元素,如果您的示例确实如此简单,那么我在这种情况下可能会忽略警告,除非您发现代码很慢
关于performance - 矩阵预分配 - MATLAB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30527527/