Why I receive an error when my code is in function but not when he's in editor ?
1 次查看(过去 30 天)
显示 更早的评论
I want to decrease my size of code, i created different function for this. But I receive a problem in one function.
This is my code and it's works when it's in editor of matlab :
for i = 1:size(Z(j).ContractionsExt_Interp,1)
pat = "visible";
NumContraction(i) = contains(visibilite(i),pat);
if NumContraction(i) == 0
Z(j).ContractionsExt_Interp_Select(i,:) = [];
else
end
end
But if I put him in my function i receive this error message: "Matrix index is out of range for deletion." for the ligne of deletion Z(j).ContractionsExt_Interp_Select(i,:) = [];
I don't understand why and how fix it. Somebody can help ?
4 个评论
Stephen23
2024-1-24
编辑:Stephen23
2024-1-24
"I don't understand why ..."
The problem is very simple: you are trying to access elements of an array that do not exist.
Lets consider this simple example vector with 4 elements:
V = 1:4
Now lets do exactly what a FOR loop would do looking at each element from 1...4:
V(1)
V(2)
Lets randomly remove the 2nd element:
V(2)=[]
Question: how many elements does the vector have now? While you consider that, lets continue with the FOR loop:
V(3)
V(4)
Does the vector have 4 elements? (hint: no). We get an error when we try to access an element that does not exist.
"... and how fix it."
Loop over the array in reverse.
采纳的回答
Bruno Luong
2024-1-24
编辑:Bruno Luong
2024-1-24
Loop in reverse would fix the issue (cross interaction between deletion that makes array strinks and loop index)
for i = size(Z(j).ContractionsExt_Interp,1):-1:1 % change here
pat = "visible";
NumContraction(i) = contains(visibilite(i),pat);
if NumContraction(i) == 0
Z(j).ContractionsExt_Interp_Select(i,:) = [];
else
end
end
更多回答(1 个)
Bruno Luong
2024-1-24
编辑:Bruno Luong
2024-1-24
You could consider to vectorize the test instead of using for loop and the side effect when deleting array element(s). I don't know your data class and organization, but it could go something like this;
NumContraction = contains({ visibility }, pat);
Z(j).ContractionsExt_Interp_Select(NumContraction & NumContraction(:)'==0) = [];
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!