v随迭代次数内存发生改变怎么进行合理的预分配 v = []; %v =zeros(1,100000); for i = 1:size(u,2) %find q cells related to the source config j = find(srcnum == i) ; vv = Q(j,:)*u(:,i); v = [v;vv]; end
时间: 2024-04-07 15:31:29 浏览: 51
可以使用matlab中的预分配技术来解决这个问题。在这种情况下,您可以首先估计v的最终大小,然后创建一个初始大小为估计大小的空向量。在每次迭代中,您可以检查v的当前大小是否已经达到了预定大小,如果达到了,则可以使用matlab中的resize函数将其扩展到两倍的大小。这样,您就可以避免在每次迭代中重新分配内存的开销。以下是修改后的代码:
v = zeros(1, size(u,2)*size(Q,1)); % 预分配
for i = 1:size(u,2)
j = find(srcnum == i) ;
vv = Q(j,:)*u(:,i);
v(i) = vv;
% 检查是否需要 resize
if i == numel(v)
v = resize(v, [1, numel(v)*2]);
end
end
请注意,这里使用的是resize函数,而不是matlab中的其他resize函数。这是因为matlab中的其他resize函数通常会导致数据重新分配内存。
阅读全文