我读到,在matlab中运行代码时,vector 的初始化节省了内存加快了执行时间,但是在这种情况下我不知道怎么做。
我有一个我重用的向量并在循环中添加到自身,所以我应该预先分配一个具有结束向量长度的向量。我试过了
vec=zeros(1,n)
但是在输出矩阵的开头加零。
clc
clear
n=6
x=0
vec=x
for i=1:n
x=x+1
vec=[vec,x]
end
vec
是否有其他方法可以初始化'vec'向量?
现在改为:
clc
clear
n=6
x=0
vec=zeros(1,n) %changed from x=0
for i=1:n
x=x+1
vec(i)=x %changed from vec=[vec,x]
end
vec
答案 0 :(得分:2)
正如documentation中所述,这可以简单地完成:vec = 0:6
你写的,“我读到了矢量的初始化在运行代码时节省了内存。”
这种说法不正确。请务必参阅文档以获取正确的信息
以下内容写在documentation:
“
for
和while
循环会逐渐增加a的大小 数据结构每次通过循环都会产生不利影响 性能和内存使用。反复调整阵列大小通常需要 MATLAB®花费额外的时间寻找更大的连续块 内存,然后将数组移动到这些块中。通常,你可以 通过预先分配最大数量来改善代码执行时间 数组所需的空间。“
所以这不是关于保存内存。这是关于提高内存使用率和执行时间。
答案 1 :(得分:1)
你可以将它初始化为一个空数组,然后连接到它。 Matlab允许这样做,但不确定这样做有多好。也不确定为什么要初始化零数组然后将x值连接到它上面。您是否尝试将索引1设置为第一个x值,将索引2设置为第二个x值,等等?