[Numpy-discussion] curious problem with SVD

Keith Goodman kwgoodman at gmail.com
Fri Jul 25 15:39:23 EDT 2008


On Fri, Jul 25, 2008 at 12:36 PM, Keith Goodman <kwgoodman at gmail.com> wrote:
> On Fri, Jul 25, 2008 at 12:32 PM, Frank Lagor <dfranci at seas.upenn.edu> wrote:
>> Perhaps I do not understand something properly, if so could someone please
>> explain the behavior I notice with numpy.linalg.svd when acting on arrays.
>> It gives the incorrect answer, but works fine with matrices.  My numpy is
>> 1.1.0.
>>
>>>>> R = n.array([[3.6,.35],[.35,1.8]])
>>>>> V,D,W = n.linalg.svd(R)
>>>>> V*n.diag(D)*W.transpose()
>> array([[ 3.5410365 ,  0.        ],
>>        [ 0.        ,  1.67537611]])
>>>>> R = n.matrix([[3.6,.35],[.35,1.8]])
>>>>> V,D,W = n.linalg.svd(R)
>>>>> V*n.diag(D)*W.transpose()
>> matrix([[ 3.6 ,  0.35],
>>         [ 0.35,  1.8 ]])
>
> '*' does element-by-element multiplication for arrays but matrix
> multiplication for matrices.

As a check (for the array case):

>> n.dot(V, n.dot(n.diag(D), W.transpose()))  # That's hard to read!

array([[ 3.6 ,  0.35],
       [ 0.35,  1.8 ]])



More information about the NumPy-Discussion mailing list