William Stein wrote:
> On Mon, Jun 15, 2009 at 7:34 PM, Jason Grout<[email protected]>
> wrote:
>> Bill Hart wrote:
>>> Can I ask what applications this "Hadamard product" has?
>
> I've never used it, but I guess it must be really really important in
> numerical computation, since most shockingly it is the *default* for
> A*B in numpy!!
>
> sage: import numpy
> sage: a = numpy.array([[1,2],[3,4]])
> sage: a*a
> array([[1, 4],
> [9, 16]], dtype=object)
>
> The above seems so utterly insanely wrong to a mathematician like me,
> it boggles my mind every time I see it :-).
I tend to really think of array manipulation and linear algebra as
totally different things -- NumPy does the former, Sage the latter.
To take the JPEG example for Hadamard product from Wikipedia (where you
e.g. need to multiply each pixel in a transformed image block by a
coefficient), I'd be quite happy have a 2D image block and multiply that
(componentwise) with another 2D array.
BUT, expressed as linear algebra, I would definitely let the image be a
vector, and the coefficients a diagonal matrix which operates on it.
I tend to just avoid using the word "matrix" for a 2D NumPy array.
Matrices and vectors are concepts in linear algebra -- if I have a 3D
array in NumPy it can definitely be a vector in writing, and a 1D array
can be a diagonal matrix in writing, and so on.
If that was too vague: Another example is that to actually multiply a
diagonal matrix with another matrix in NumPy's array expression I'd tend
to do
vector_of_diagonal * the_matrix
which works because of broadcasting:
In [11]: np.array([[1,2,3]]).T * np.identity(3)
Out[11]:
array([[ 1., 0., 0.],
[ 0., 2., 0.],
[ 0., 0., 3.]])
The "Sage way" of doing that would likely be to have a seperate
DiagonalMatrix type or so; so in a sense NumPy is rawer and more
lower-level. Both have their place.
--
Dag Sverre
--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at http://groups.google.com/group/sage-devel
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---