MATLAB: Difficulty storing Output from Loop (Unable to perform assignment because the size of the left side is 1-by-1 and the size of the right side is 2-by-1)

arrayfor looploopmatrixvector

This loop works –
for i=1:19
x(find(y(start(i):end(i),:)
==max(y(start(i):end(i),:)))+ (start(i)-1))
end
However, when I try to store the answers in a matrix:
MatrixName = []
for i = 1:19;
MatrixName(i,:) = x(find(y(start(i):end(i),:)
==max(y(start(i):end(i),:)))+ (start(i)-1))
end
I get the following error:
%Unable to perform assignment because the size of the left side is 1-by-1 and
% the size of the right side is 2-by-1.
I think the reason is because in one of the loop iterations there are 2 answers instead of 1 (there are 2 x values when the variable y is at it's max). I can further confirm this because it actually does store the values in a matrix until it gets to that specific trial with 2 values, so that's probably the reason. How would I be able to store these answers?

Best Answer

  • To store arrays of different sizes, use a cell array:
    KMaxSBPFullTime = cell(1, 19);
    for i = 1:19
    KMaxSBPFullTime{i} = ...
    By the way, your code is extremely hard to read. Shorter names would increase the readability:
    Result = cell(1, 19);
    K5 = KFiveMinTimes;
    Kend = KEndMinTimes;
    SBP = KetamineRaw.SBP;
    Time = KetamineRaw.Time;
    for k = 1:19
    tmp = SBP(K5(k):KEnd(k),:);
    Result{k} = Time(find(tmp == max(tmp)) + K5(k) - 1);
    end