[Numpy-discussion] Re: Numpy-discussion digest, Vol 1 #50 - 2 msgs
Travis Oliphant
Oliphant.Travis at mayo.edu
Wed May 3 02:52:33 CDT 2000
> Dear Numerical Python users,
>
> I am new to the numerical python and extending python in C.
> I am making a module that involves the construction of complex
> matrices. But first, I really want to understand how these matrices are
> constructed.
> Here is an example function that constructs a matrix of size M and
> puts on each position a complex number "x+I y". x and y are arguments
> when you call the function in python.
>
> My question: Is this the right way of organising the
> construction of a complex matrix. Are there easier ways?
> Can I construct the matrix directly in "result->data"??
>
Yes, you can create the array, point a pointer to "result->data" and fill
it in. Internally, when the array is created an equivalent malloc is
performed.
I've changed your code below to eliminate the unecessary copying.
>
>
> static PyObject* matrix(PyObject *self, PyObject *args){
> double x,y;
> int size;
> int M,n,m;
> PyArrayObject *result;
> int dimensions[2];
> Py_complex *data;
> Py_complex p;
> if(!PyArg_ParseTuple(args,"idd",&M,&x,&y))
> return NULL;
> dimensions[0] = M;
> dimensions[1] = M;
> result = (PyArrayObject
> *)PyArray_FromDims(2,dimensions,PyArray_CDOUBLE);
> data = result->data;
> for(n=0;n < M;n++){
> for(m=0; m<M; m++){
> p.real=x;
> p.imag=y;
> data[n*M+m] = p;
> }
> }
> return PyArray_Return(result);return
> PyComplex_FromDoubles(data[1].real,data[1].imag);
> free(data);
> }
>
Welcome to the wonderful world of NumPy.
-Travis
More information about the Numpy-discussion
mailing list