[SciPy-dev] Matlab io bug; request for advice
Gregor Thalhammer
gregor.thalhammer@gmail....
Thu Feb 19 05:18:01 CST 2009
Matthew Brett schrieb:
...
> However, matlab tends to think of an unshaped vector as being a row vector:
>
>
>>> a = 1:12;
>>> size(a)
>>>
>
> ans =
>
> 1 12
>
> And numpy thinks the same:
>
>
>>>> print np.atleast_2d(np.array([1,2])).shape
>>>>
> (1, 2)
>
> It seems to me then, that I should assume the same, that a 1
> dimensional array is a row vector. However, this will change the
> matlab shape of a 1 d array passed into the matlab mat file routines
> from a column vector to a row vector.
>
> Do y'all think I should:
>
> a) Given this is undocumented anyway, just switch to the row vector
> b) Keep 1d arrays as column vectors
> c) Raise a warning and change for a future release
>
>
I vote for option b: keep 1d arrays as column vectors. Numpy and matlab
follow two fundamentally different conventions: numpy uses by default C
contiguous arrays, matlab Fortran contiguous arrays. If A is a matrix,
in numpy 'for vector in A: ...' loops over the row vectors, in matlab
'for vector = A' loops over the colum vectors. Matlab follows more
closely the notation mathematicians prefer, e.g., indices start with 0,
1d vectors are column vectors. Therefore I am convinced that a 1d vector
in numpy (a row vector) corresponds more naturally to a column vector in
matlab. I see the argument that [1:12] in matlab is a row vector, but I
think this is simply to be consistent with the direct entry of matrices
([1:12; 1:12] is a 2x12 matrix) and to be more economic in displaying on
screen. In my opinion this is not sufficient to deduce what should be
the default shape of a 1d vector in matlab.
Gregor
More information about the Scipy-dev
mailing list