On Dec 11, 2008, at 13:41 , Xah Lee wrote:
On Dec 10, 2:47 pm, John W Kennedy <jwke...@attglobal.net> wrote:
Xah Lee wrote:
In lisp, python, perl, etc, you'll have 10 or so lines. In C or
Java,
you'll have 50 or hundreds lines.
C:
#include <stdlib.h>
#include <math.h>
void normal(int dim, float* x, float* a) {
float sum = 0.0f;
int i;
float divisor;
for (i = 0; i < dim; ++i) sum += x[i] * x[i];
divisor = sqrt(sum);
for (i = 0; i < dim; ++i) a[i] = x[i]/divisor;
}
i don't have experience coding C. The code above doesn't seems to
satisfy the spec. The input should be just a vector, array, list, or
whatever the lang supports.
The output is the same datatype of the same dimension.
This does satisfy it, depending on what you mean by "return". In C
it is more common to do in-place assignment of pointers, rather than
return values. So in the code above
float *x is a list, if you will, of floats
float *a is a list also
dim is the length of the list
it assumes that the outside code has already allocated the space for
a and x. Instead of returning "a", it modifies the list in place.
(for C purists, I know it's not a list, but that's just a convenient
term).
Also, for python, I wouldn't choose to code it in one line, when 2 is
clearer:
def normal(x):
square=sqrt(sum([val**2 for val in x]))
return [val/square for val in x]
or, as others have pointed out, for numerical work I'd just use numpy:
from numpy import *
def normal(x):
return x/sqrt(x.sum())
or something like that.
bb
--
Brian Blais
bbl...@bryant.edu
http://web.bryant.edu/~bblais
--
http://mail.python.org/mailman/listinfo/python-list