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; useargwhere(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. Using1.int, 1.float, 1.double
or1.stride
may solve your problem.
Matlab and swix differences¶
x[array(1, 2, 3)] = 1
andx[array(1, 2), array(1, 2)] = 1
does not work; useones(3)
andones((2,2))
instead. If you can, come up with a clever hack likex[0..<N] *= 0
.- Swix follow’s NumPy’s footprints, meaning if
(u, s, v) = svd(x)
thentranspose(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 printmatrix([0, 0, <junk>, <junk>])
argwhere
is the equivalent of Matlab’sfind
. 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