[Numpy-discussion] meaning of accumulation/normalisation

Charles R Harris charlesr.harris@gmail....
Thu Apr 10 18:20:44 CDT 2008


On Thu, Apr 10, 2008 at 4:18 PM, wilson <wilson.t.thompson@gmail.com> wrote:

> hi
> i came across some image processing code in java and tried to
> duplicate the operation on an ndarray.the array is supposed to contain
> pixel values of a gryscale image generated by the program. however the
> code does some accumulation operation as below to obtain a value
> 'norm'
>
> ul=array(([....],[....]....,[...])) #containing float values
>
> def accumOperation(ul):
>        nr,nc=ul.shape
>        print "nr:",nr,"nc:",nc
>        val=0.0
>        for r in range(nr):
>                for c in range(nc):
>                        val+=ul[r][c]*ul[r][c]
>        return val
> norm=accumOperation(ul)
> newul=ul/norm
>
> the java doc mentions that by the above steps ul is normalised to unit
> length (vector length)


Umm, not quite, it is missing a square root. You can get the same result by
using the Frobenius norm

 NORM(X,'fro') is the Frobenius norm, sqrt(sum(diag(X'*X)))

Which is matlab speak for sqrt(trace(dot(X.T, X))) or
sqrt(inner(X.flat,X.flat)), but you can get it easier using norm(X,'fro'). I
don't know why your code is missing a sqrt unless it drops out somewhere
else. Basically, just treat an nxn array as a vector of length n**2.

Chuck
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://projects.scipy.org/pipermail/numpy-discussion/attachments/20080410/4c7cdc7b/attachment.html 


More information about the Numpy-discussion mailing list