Preallocate variables with unkown size
1 次查看(过去 30 天)
显示 更早的评论
I pre allocate the two variables phi and phiPrime by setting a maximum size and then crop them afterwards. The thing is that both of them depend on vector b which changes its size in every ii.
I did something like the following but not sure if it is quite correct and computational effective.
but I'm not sure whether the way I preallocated the variables lead into wrong results or not.
function [G_dmg, G_orig, phic, inActiveSorted] = SH_decision(G_dmg, G_orig, phic)
N = numnodes(G_dmg);
inActive = find(degree(G_dmg)==0);
impact = -1* ones(1,length(inActive));
phi = zeros(N, 1);
phiPrime = zeros(N, 1);
phidPrime = zeros(N, 1);
lastIdx = 0;
numNeighborsPernode = [];
activeNeighbors = [];
for ii = 1:length(inActive)
b = neighbors(G_orig, inActive(ii));
if ~isempty (b)
degreeOrig = degree(G_orig, b);
degreeDmg = degree(G_dmg, b);
phi(lastIdx + 1: length(b)+lastIdx) = degreeDmg./degreeOrig;
phiPrime(lastIdx + 1: length(b)+lastIdx) = degreeRestoration./degreeOrig ;
impact(ii) = nnz(phi(lastIdx + 1: length(b)+lastIdx)<=phi & phiP(lastIdx + 1: length(b)+lastIdx)>phi);
phidPrime = phiPrime - phi;
lastIdx = lastIdx + length(b);
end
end
phi = phi(1:lastIdx, :);
phiPrime = phiPrime(1:lastIdx, :);
phidPrime = phidPrime(1:lastIdx, :);
end
2 个评论
KSSV
2022-5-23
Is phi and phiPrime are vectors at the end?
Why you are using (lastIdx + 1: length(b)+lastIdx) as the index while saving inside loop?
采纳的回答
Bruno Luong
2022-5-23
编辑:Bruno Luong
2022-5-23
You can compute exactly the size needed for your vectors
A = G_orig.adjacency;
A(inActive,:) = 0;
m = nnz(A(:,inActive));
phi = zeros(m, 1);
phiPrime = zeros(m, 1);
...
13 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Whos 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!