What's intuitive is very dependent upon your background. If you're coming from
Matlab, for example, "everything is a matrix" and Matlab does this
extraordinarily-confusing thing:
ones(3,3,3) gives me a 3d array;
ones(3,3) gives me a 2d array;
but
>> ones(3)
ans =
1 1 1
1 1 1
1 1 1
Why the heck did it give me a 2d matrix when I asked for a 1-dimensional
vector of 1s?
Julia is much more consistent: the dimensionality of the created object is
equal to the number of indices you supply. If you ask for something that's
3x1, that's the size you'll get out; perforce, that is a 2d array.
--Tim
On Monday, November 17, 2014 09:41:10 AM Eka Palamadai wrote:
> "which I think is reasonable" is a subjective argument.
> It would be helpful if the type system is intuitive and non-confusing to
> programmers.
>
> On Monday, November 17, 2014 12:24:58 PM UTC-5, Andreas Noack wrote:
> > Semantically, ones(n,1) creates a vector and not a matrix.
> >
> > I'd rather say that in MATLAB ones(n,1) creates a vector.
> >
> > This has been discussed many times on the list and in issues. In
> > particular, see the famous https://github.com/JuliaLang/julia/issues/4774
> > .
> >
> > In Julia, Vector{T} and Matrix{T} are aliases for Array{T,1} and
> > Array{T,2} which I think is reasonable. The questions are to what extend a
> > nx1 Matrix should work similarly to a Vector and a Vector should work
> > similarly to a nx1 Matrix. That is the discussion in the issue mentioned,
> > and it is actually more subtle than one would expect.
> >
> > 2014-11-17 12:04 GMT-05:00 Eka Palamadai <[email protected] <javascript:>>
> >
> >> Semantically, ones(n,1) creates a vector and not a matrix.
> >> Why is ones(n,1) different from ones(n)?
> >> The type system is very confusing and non-intuitive.
> >>
> >> On Sunday, November 16, 2014 7:28:28 PM UTC-5, Andreas Noack wrote:
> >>> The input should be two Vectors, but your first argument is a Matrix
> >>>
> >>> 2014-11-16 19:25 GMT-05:00 Eka Palamadai <[email protected]>:
> >>>> SymTridiagonal does not seem to work properly.
> >>>>
> >>>> For e.g, the following snippet fails.
> >>>>
> >>>> julia> n=10 ;
> >>>> A=SymTridiagonal(2*ones(n,1), -1*ones(n-1));
> >>>> ERROR: `convert` has no method matching
> >>>> convert(::Type{SymTridiagonal{T}},
> >>>>
> >>>> ::Array{Float64,2}, ::Array{Float64,1})
> >>>>
> >>>> in call at base.jl:34
> >>>>
> >>>> Any thoughts?