Bugs

  • operator associativity and precedence doesn’t always work (for example, x *! inv(x) ~== eye(N)); it this issue pops up, fix it with some parens: (x *! y) ~== eye(N).

  • This library depends on OpenCV’s memory being continuous. It does check

    and will give nonsense output. Indexing (x[0..<2, 0..<2]), machine learning functions (SVM, kNN), solve and comparison (< > >= <=) all depend on this.

  • The ~== operator only verifies if entire arrays are equal; use argwhere(abs(x-y) < 1e-9) to see where the individual entries are equal.

  • Be careful with operators and precedence! Use parens to avoid issues with this. I had sin(x)^2 + cos(x)^2 and this did not equal 1 like I expected; parens fixed this issue.

Compiler bugs

  • If you get bugs like vector cannot be cast as matrix or something that doesn’t make much sense, you’re probably calling a function with the wrong arguments. Even worse, this may be a confusion between Int/Float/Double/vDSP_Length/etc. Using 1.int, 1.float, 1.double or 1.stride may solve your problem.

Matlab and swix differences

  • x[array(1, 2, 3)] = 1 and x[array(1, 2), array(1, 2)] = 1 does not work; use ones(3) and ones((2,2)) instead. If you can, come up with a clever hack like x[0..<N] *= 0.
  • Swix follow’s NumPy’s footprints, meaning if (u, s, v) = svd(x) then transpose(v_matlab) == v_swix == v_numpy. Additionally, s is a one dimensional matrix (again like NumPy), not a 2D matrix with only the diagonal non-zero.
  • When printing, swix does not check bounds (as of 2014-7-17). e.g., var x = zeros(2); println(x[0..<4]) will print matrix([0, 0, <junk>, <junk>])
  • argwhere is the equivalent of Matlab’s find. It finds the locations where the input array is 1 (and Matlab finds locations of the non-zero entries).
  • Element-wise multiplication is * and dot product is *!. Matlab uses .* and * respectively.
  • The reshape functions works differently in matlab and python. In matlab, it reshapes by column order and in python row-order, meaning you have to use x.T.reshape((3,3)) to get equivalent results.

Beta bugs

For some reason Xcode can’t link to the Accelerate framework from the iOS simulator, meaning that swix applications only run on physical devices. It gives errors like “unresolved identifier vDSP_vmulD not found”

Installation bugs

These are covered in Installation