9

Octave(/matlab)'s notation for handling multiple return values

[a, b] = f(x)

suggests that the values returned by f(x) are in a sort of row vector and that Octave supports vector unpacking (like Python's tuple-unpacking).

Yet when I put

[a, b] = [1, 2]

I get

error: invalid number of output arguments for constant expression

Does octave support vector-unpacking?

If so, what's the proper notation?

I can't find anything in the documentation

dspyz
  • 5,280
  • 2
  • 25
  • 63
  • The square brackets (`[]`) have a slightly different meaning when the right side of the assignment is a function call. What is it that you want to achieve exactly? – Eitan T Mar 13 '13 at 18:18
  • I have two vectors (A and B) I want to iterate over simultaneously. In python I would do for a,b in zip(A,B): //Do some stuff with a and b – dspyz Mar 13 '13 at 18:37

1 Answers1

7

I don't have Octave to test, but in MATLAB you can "unpack" cell arrays.

x = {1 2};
[x1,x2] = x{:}

x1 =
     1
x2 =
     2

You can convert numerical vector to a cell array as x = num2cell([1 2]);.

I have to add that this works for MATLAB starting from version 7.0. For earlier version you have to use DEAL function.

yuk
  • 19,098
  • 13
  • 68
  • 99
  • That works in Octave as well. Thanks. It still seems a little wordy for such a common operation – dspyz Mar 13 '13 at 18:19