How to output a vector/array from a created function
显示 更早的评论
In short, I have an array that has numbers from 0 to 100 using a step of 0.01, I created a function that is supposed to output another array containing 1's and -2's. While looping on the indices of my first array if the number is smaller than 40, I insert 1 in my output array, otherwise I insert a -2. I don't know what's the problem in my code:
function [outputVector] = myOutput(inputVector)
outputVector = [];
for i=1 : size(inputVector)
if inputVector(i) < 40
outputVector = [outputVector,1] ;
else
outputVector = [outputVector,-2];
end
end
end
采纳的回答
更多回答(1 个)
James Tursa
2019-6-19
编辑:James Tursa
2019-6-19
Don't use size(inputVector) for your loop indexing limits since this is a vector. Use numel(inputVector) instead.
Also, you shouldn't be increasing the size of outputVector iteratively inside your loop. Each time you do that, the memory for the variable has to get copied to new memory. This can hurt the performance in a massive way. Instead, pre-allocate and use indexing. E.g., instead of this:
outputVector = [];
:
outputVector = [outputVector,1] ;
do this:
outputVector = zeros(size(inputVector));
:
outputVector(i) = 1;
There are also ways to calculate your result without using a loop.
3 个评论
Omar Sinno
2019-6-20
"I'd love to know how to do it without a loop."
Not only are these simpler than your code, they will also be much more efficient.
Method one: basic arithmetic:
>> V = randi([1,100],1,17)
V =
93 45 83 48 1 41 14 93 43 8 41 64 46 10 21 48 65
>> 3*(V<40)-2
ans =
-2 -2 -2 -2 1 -2 1 -2 -2 1 -2 -2 -2 1 1 -2 -2
Method two: basic indexing:
>> X = [-2,1];
>> X(1+(V<40))
ans =
-2 -2 -2 -2 1 -2 1 -2 -2 1 -2 -2 -2 1 1 -2 -2
Steven Lord
2019-6-20
A different way that doesn't require logical arithmetic but just logical indexing:
V = randi([1, 100], 1, 17);
result = ones(size(V));
result(~(V < 40)) = -2;
% or
result = repmat(-2, size(V));
result(V < 40) = 1;
类别
在 帮助中心 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!