假设我们有以下数组:
a=[12 21 23 10 34 54 10 9 5 6 7 8]
a =
12 21 23 10 34 54 10 9 5 6 7 8
长度(a)=
length(a)
ans =
12
现在我要创建以下向量b,其中b(1),b(2)... b(6)如下
b(1)=sqrt(a(1)^2+a(2)^2)
b(2)=sqrt(a(3)^2+a(4)^2)
b(3)=sqrt(a(5)^2+a(6)^2))
b(4)=sqrt(a(7)^2+a(8)^2)
b(5)=sqrt(a(9)^2+a(10)^2))
b(6)=sqrt(a(11)^2+a(12)^2)
我写了以下代码
or i=2:2:length(a)
b(i/2)=sqrt(a(i-1)^2+a(i)^2);
end
>> b
b =
24.1868 25.0799 63.8122 13.4536 7.8102 10.6301
但我不确定它是否正确,请求帮我澄清我的代码中是否一切正常
答案 0 :(得分:2)
在matlab中,循环非常慢。使用矢量要快得多。因此我建议没有循环的解决方案:
a_1 = a(1:2:end);
a_2 = a(2:2:end);
b = sqrt(a_1.^2 + a_2.^2);
首先,创建一个向量a_1
,其中包含奇数索引为a
的所有元素和包含所有带偶数索引的元素的向量a_2
。
然后你明智地将它们平方(.^
)并取总和的平方。
对于a
的例子,这快了75倍。随着数组大小的增加,您将节省更多时间。