[Numpy-discussion] design issues - octave 'incompatibilities'
Travis Oliphant
oliphant at ee.byu.edu
Wed Jul 27 01:03:09 CDT 2005
Soeren Sonnenburg wrote:
>I am realizing that this must have been why cvxopt switched away from
>numarray/numeric. There slicing/indexing and '*' work as I would have
>expected:
>
>
cvxopt uses it's own classes because they did not feel that a general
purpose array was needed. They wanted to define a matrix class with
sparse matrix and dense matrix sub-classes. In fact, cvxopt's matrix
classes can not be used as ubiquitously as Numeric/numarray arrays.
Everything is not a matrix. In fact, I would like to see more general
linear algebra routines that allow people to more naturally deal with
(for example) six-dimensional linear operators mapping from a
three-dimensional space to a three-dimensional space. Currently, you
are forced to perform an artificial row-scanning procedure just to
interface with matrix libraries. Scipy can help with this kind of thing.
I do not see cvxopt as a competing array implementation. At some
point, hopefully cvxopt will be integrated with scipy. I am continually
looking for feasible ways to make scipy more attractive to
contributors. Everybody benefits when their is a standard
infrastructure. For example, there are sparse matrices in SciPy. If
cvxopt has better sparse matrix objects, I would love to use them.
Hopefully, the array interface will assist on a more abstract scale so
that memory re-use can occur for at least the dense cvxopt matrices.
>It now seems very difficult for me to end up with a single
>numeric/matrix package that makes it into core python - which is at the
>
>
>same time very sad.
>
>
Their are several issues here. But, yes a Matrix object will always be
a separate object just as quaternions should be because they represent
an interpretation to a memory block. In Numeric/numarray the focus is
on generic multidimensional arrays. Therefore numeric operators must be
element-by element.
Note that Numeric does have a Matrix object that allows you to use '*'
to represent matrix multiplication. It's only problem is that passing
this object to a function usually returns an array again instead of a
Matrix.
-Travis
More information about the Numpy-discussion
mailing list