I find this behaviour very confusing:
The following works, but I am certain that there must be better ways to do it:
SMatrix{size(tester)...}(tester)
How should I construct a static vector?
I find this behaviour very confusing:
The following works, but I am certain that there must be better ways to do it:
SMatrix{size(tester)...}(tester)
How should I construct a static vector?
This is explicitly stated in the docs:
m5 = SMatrix{2,2}([1 3 ; 2 4]) # Array conversions must specify size
When you’re using a macro, the macro can only see the syntax. In the first case, it can figure out the size of the result, but in the second case it just sees a symbol and has no idea what hides behind it.
Alright, that makes sense.
I have now defined the following in my script:
svec(x::AbstractVector) = SVector{length(x)}(x)
svec(some_vector) == SVector{length(some_vector)}(some_vector) # returns true
Why is that, and something like it, not defined? It seems awfully redundant to write the proposed
m5 = SMatrix{2,2}([1 3 ; 2 4])
, when the dimensions of [1 3; 2 4]
can be found from the input.
In this case SMatrix{2,2}([1 3 ; 2 4])
the function SMatrix
does not have access to the size at type level, the macro @SMatrix
does. If you allow SMatrix(matrix)
you will end up with a lot of users having type unstable code which would defeat a lot of the purpose of StaticArrays, speed and stack allocation. The function you defined is indeed type unstable for normal arrays.
Got it. Thanks!