Why does exceeding array index in this program not show an error?
조회 수: 2 (최근 30일)
이전 댓글 표시
This is most basic code to reproduce my problem:
clear all; clc; close;
R = 64;
array_b = zeros(1, 1000);
for i = 1:10000
for kk=15:-1:2, % if ,WOLA_R=64
array_b(1,(kk+1)*R:-1:kk*R+1)=array_b(1,kk*R:-1:(kk-1)*R+1);
end
end
Running this program does not show any errors. If I put a breakpiunt at the line
array_b(1,(kk+1)*R:-1:kk*R+1)=array_b(1,kk*R:-1:(kk-1)*R+1);
and try to view the value of array_b(1,(kk+1)*R:-1:kk*R+1), I get
??? Index exceeds matrix dimensions.
which is what I expect. Size of array_b is (1, 1000) and for kk = 15 (first iteration of the loop), (kk+1)R:-1:kkR+1 = 1024 > 1000, so I should get an error.
But if I run the program normally I don't get an error. Why is that? This is supposed to copy the contents of array_b from lower indices to higher indices, 64 elements at a time. During the first iteration of the loop, if it does not make an error, where do the elements that are supposed to go from 1001 to 1024 go to?
댓글 수: 0
답변 (1개)
per isakson
2020년 6월 26일
편집: per isakson
2020년 6월 26일
Because there are values of the second index, which exceeds 1000 (as you have noticed)
K>> (kk+1)*R:-1:kk*R+1
ans =
Columns 1 through 6
1024 1023 1022 1021 1020 1019
Columns 7 through 12
1018 1017 1016 1015 1014 1013
the assignment then increases (silently) the size of array_b
K>> whos array_b
Name Size Bytes Class Attributes
array_b 1x1024 8192 double
Matlab works that way
K>> a=1
a =
1
K>> a(3)=3;
K>> a
a =
1 0 3
댓글 수: 2
per isakson
2020년 6월 26일
"1024 elements long" pre-allocating to the exact size makes the program a bit faster. I cannot think of any other difference. Since you start by assigning to the highest index, I guess you could save a tine bit of time by skipping the pre-allocation. That was once true.
참고 항목
카테고리
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!