Getting Error message 'Array indices must be positive integers or logical values.'
이전 댓글 표시
So, I have a question to do with leap Years. I have done all the code, just stuck with this error message. Here is my code
function [outputArg1] = GetLeapYears(startYear,endYear)
%UNTITLED12 Summary of this function goes here
% Detailed explanation goes here
m = (endYear - startYear)+1;
v = (startYear:1:endYear);
b = zeros(1,m);
for c = 1:m
b(c) = IsLeapYear(v(c));
end
outputArg1 = v(b);
and the IsLeapYear code is
function T = IsLeapYear(Year)
T = not (mod(Year, 4)) & (mod(Year, 100)) | not (mod(Year, 400));
end
댓글 수: 5
Stephen23
2021년 1월 24일
While Kalyan Acharjya shows a work-around, the correct fix is actually to replace this:
b = zeros(1,m);
with this:
b = false(1,m);
James Harrison
2021년 1월 24일
KALYAN ACHARJYA
2021년 1월 24일
편집: KALYAN ACHARJYA
2021년 1월 24일
@Stephen Cobeldick Yes, @James Harrison Its logical array, that also works perfectly and simpler too
>> b = zeros(1,3)
b =
0 0 0
See Data Type
>> whos b
Name Size Bytes Class Attributes
b 1x3 24 double
Other hand
>> b = false(1,3)
b =
1×3 logical array
0 0 0
Here
>> whos b
Name Size Bytes Class Attributes
b 1x3 3 logical
"im just wondering why it works better?"
When you preallocate the array b as numeric and then later use indexing to allocate logical values to it, the array does not change class when you allocate (via indexing) those logical values, instead those logical values are coerced into numeric values. And then because a numeric array is not a logical array you cannot use it for logical indexing (only logical arrays can be used for logical indexing). Thus Kalyan Acharjya requires the extra comparison operator on the (coerced) numeric values to see if they are equivalent to true (coerced to numeric one) which creates a logical array which is basically a copy of that numeric array... so you just end up using twice as much memory with more operations.
Note that my simpler and more efficient answer did not involve any coercion or superfluous comparison or data duplication.
James Harrison
2021년 1월 24일
채택된 답변
추가 답변 (0개)
카테고리
도움말 센터 및 File Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!