VrArrayPtrI64 vrAllocArrayI64RM(int ndims,int func,int *sizes){ VrArrayPtrI64 arr; switch(func){ case 0: //Zeros { VR_GET_DATA_I64(arr)=(long*)VR_MALLOC(sizeof(long)*getNumElem(sizes,ndims)); memset(VR_GET_DATA_I64(arr),0,sizeof(int)*getNumElem(sizes,ndims)); VR_GET_NDIMS_I64(arr)=ndims; VR_GET_DIMS_I64(arr)=(dim_type*)VR_MALLOC(sizeof(dim_type)*ndims); memcpy(VR_GET_DIMS_I64(arr),sizes,ndims*sizeof(dim_type)); return arr; } case 1: // Ones { VR_GET_DATA_I64(arr)=(long*)VR_MALLOC(sizeof(long)*getNumElem(sizes,ndims)); VR_GET_NDIMS_I64(arr)=ndims; VR_GET_DIMS_I64(arr)=(dim_type*)VR_MALLOC(sizeof(dim_type)*ndims); memcpy(VR_GET_DIMS_I64(arr),sizes,ndims*sizeof(dim_type)); int numel=getNumElem(sizes,ndims); for(int i=0;i<numel;i++){ VR_GET_DATA_I64(arr)[i]=1.0f; } return arr; } case 2 : //Empty Matrix { VR_GET_DATA_I64(arr) = NULL; VR_GET_NDIMS_I64(arr) = ndims; VR_GET_DIMS_I64(arr)=(dim_type*)VR_MALLOC(sizeof(dim_type)*ndims); memcpy(VR_GET_DIMS_I64(arr),sizes,ndims*sizeof(dim_type)); return arr; } } }
void ResizableArray<ElemType>::printInt(void) const { for( int i=0; i<getNumElem(); i++ ) { int elem = (int) (getElem(i)); printf("%d\t%d\n",i,elem); }; }
VrArrayPtrCF32 BlasComplexSingle::elem_mult(VrArrayPtrCF32 A, VrArrayPtrCF32 B) { if ( !checkdims<VrArrayCF32>(A,B) ) { std::cout<<"dimensions do not match. \n Exiting. "<<std::endl; exit(0); } VrArrayPtrCF32 C = vec_copy(VR_GET_NDIMS_CF32(A),A); for (int i = 0; i < getNumElem(VR_GET_DIMS_CF32(A),VR_GET_NDIMS_CF32(A)); i++) { VR_GET_DATA_CF32(C)[i] *= VR_GET_DATA_CF32(B)[i]; } return C; }
VrArrayPtrF64 vrAllocArrayF64RM(int ndims,int func,int *sizes){ VrArrayPtrF64 arr; switch(func){ case 0: //Zeros { VR_GET_DATA_F64(arr)=(double*)VR_MALLOC(sizeof(double)*getNumElem(sizes,ndims)); memset(VR_GET_DATA_F64(arr),0,sizeof(double)*getNumElem(sizes,ndims)); VR_GET_NDIMS_F64(arr)=ndims ==1?2:ndims; VR_GET_DIMS_F64(arr)=(dim_type*)VR_MALLOC(sizeof(dim_type)*arr.ndims); arr.dims[1] = 1; memcpy(VR_GET_DIMS_F64(arr),sizes,ndims*sizeof(dim_type)); return arr; } case 1: // Ones { //arr=(VrArrayPtrF64)VR_MALLOC(sizeof(VrArrayF64)); VR_GET_DATA_F64(arr)=(double*)VR_MALLOC(sizeof(double)*getNumElem(sizes,ndims)); VR_GET_NDIMS_F64(arr)=ndims; //memcpy(arr->dims,sizes,ndims*sizeof(int)); VR_GET_DIMS_F64(arr)=(dim_type*)VR_MALLOC(sizeof(dim_type)*ndims); memcpy(VR_GET_DIMS_F64(arr),sizes,ndims*sizeof(dim_type)); int numel=getNumElem(sizes,ndims); for(int i=0;i<numel;i++){ VR_GET_DATA_F64(arr)[i]=1.0f; } return arr; } case 2 : //Empty Matrix { // arr=(VrArrayPtrF64)VR_MALLOC(sizeof(VrArrayF64)); VR_GET_DATA_F64(arr) = NULL; VR_GET_NDIMS_F64(arr) = ndims; VR_GET_DIMS_F64(arr)=(dim_type*)VR_MALLOC(sizeof(dim_type)*ndims); memcpy(VR_GET_DIMS_F64(arr),sizes,ndims*sizeof(dim_type)); return arr; } } }
VrArrayPtrF32 vrAllocArrayF32RM(int ndims,int func,int *sizes){ VrArrayPtrF32 arr; switch(func){ case 0: //Zeros { //VrArrayPtrF32 arr;//=(VrArrayPtrF32)VR_MALLOC(sizeof(VrArrayF32)); VR_GET_DATA_F32(arr)=NULL; VR_GET_DATA_F32(arr)=(float*)VR_MALLOC(sizeof(float)*getNumElem(sizes,ndims)); memset(VR_GET_DATA_F32(arr),0,sizeof(float)*getNumElem(sizes,ndims)); VR_GET_NDIMS_F32(arr)=ndims ==1?2:ndims; VR_GET_DIMS_F32(arr)=(dim_type*)VR_MALLOC(sizeof(dim_type)*arr.ndims); memset(arr.dims,1,sizeof(dim_type)*arr.ndims); memcpy(VR_GET_DIMS_F32(arr),sizes,ndims*sizeof(dim_type)); return arr; } case 1: // Ones { //arr//(VrArrayPtrF32)VR_MALLOC(sizeof(VrArrayF32)); VR_GET_DATA_F32(arr)=(float*)VR_MALLOC(sizeof(float)*getNumElem(sizes,ndims)); VR_GET_NDIMS_F32(arr)=ndims ==1?2:ndims; VR_GET_DIMS_F32(arr)=(dim_type*)VR_MALLOC(sizeof(dim_type)*arr.ndims); memset(arr.dims,1,sizeof(dim_type)*arr.ndims); memcpy(VR_GET_DIMS_F32(arr),sizes,ndims*sizeof(dim_type)); int numel=getNumElem(sizes,ndims); for(int i=0;i<numel;i++){ VR_GET_DATA_F32(arr)[i]=1.0f; } return arr; } case 2 : //Empty Matrix { //arr=(VrArrayPtrF32)VR_MALLOC(sizeof(VrArrayF32)); VR_GET_DATA_F32(arr) = NULL; VR_GET_NDIMS_F32(arr) = ndims== 1?2:ndims; VR_GET_DIMS_F32(arr)=(dim_type*)VR_MALLOC(sizeof(dim_type)*arr.ndims); memset(arr.dims,1,sizeof(dim_type)*arr.ndims); memcpy(VR_GET_DIMS_F32(arr),sizes,ndims*sizeof(dim_type)); return arr; } } }
VrArrayPtrCF32 vrAllocArrayF32CM(int ndims,int func,int *sizes){ VrArrayPtrCF32 arr; switch(func){ case 0: //Zeros { //arr=(VrArrayPtrCF32)VR_MALLOC(sizeof(VrArrayCF32)); //mxCreateNumericArray(ndims,(int*)sizes,mxSINGLE_CLASS,mxREAL); VR_GET_DATA_CF32(arr)=(float complex *)VR_MALLOC(sizeof(float complex)*getNumElem(sizes,ndims)); VR_GET_NDIMS_CF32(arr)=ndims; memset(VR_GET_DATA_CF32(arr),0,sizeof(double)*getNumElem(sizes,ndims)); //memcpy(arr->dims,sizes,ndims*sizeof(int)); VR_GET_DIMS_CF32(arr)=(dim_type*)VR_MALLOC(sizeof(dim_type)*ndims); memcpy(VR_GET_DIMS_CF32(arr),sizes,ndims*sizeof(dim_type)); return arr; } case 1: // Ones { //arr=(VrArrayPtrCF32)VR_MALLOC(sizeof(VrArrayCF32)); //mxCreateNumericArray(ndims,(int*)sizes,mxSINGLE_CLASS,mxREAL); VR_GET_DATA_CF32(arr)=(float complex*)VR_MALLOC(sizeof(float complex)*getNumElem(sizes,ndims)); VR_GET_NDIMS_CF32(arr)=ndims; //memcpy(arr->dims,sizes,ndims*sizeof(int)); VR_GET_DIMS_CF32(arr)=(dim_type*)VR_MALLOC(sizeof(dim_type)*ndims); memcpy(VR_GET_DIMS_CF32(arr),sizes,ndims*sizeof(dim_type)); int numel=getNumElem(sizes,ndims); for(int i=0;i<numel;i++){ VR_GET_DATA_CF32(arr)[i]=1.0f; } } return arr; case 2 : //Empty Matrix { // arr=(VrArrayPtrCF32)VR_MALLOC(sizeof(VrArrayCF32)); VR_GET_DATA_CF32(arr) = NULL; VR_GET_NDIMS_CF32(arr) = ndims; VR_GET_DIMS_CF32(arr)=(dim_type*)VR_MALLOC(sizeof(dim_type)*ndims); memcpy(VR_GET_DIMS_CF32(arr),sizes,ndims*sizeof(dim_type)); return arr; } } }
VrArrayPtrCF32 BlasComplexSingle::scal_add(int ndims, VrArrayPtrCF32 X, float complex scal, const int incX ) { int N = getNumElem(VR_GET_DIMS_CF32(X), ndims); VrArrayPtrCF32 Y=vec_copy(ndims, X); float complex * out=VR_GET_DATA_CF32(Y); for(int i=0;i<N;i++){ //out[2*i]+=scal[0]; //out[2*i+1]=scal[1]; out[i]+=scal; } return Y; }
VrArrayPtrCF32 BlasComplexSingle::elem_div(VrArrayPtrCF32 A, VrArrayPtrCF32 B, bool zeroCheck) { if ( !checkdims<VrArrayCF32>(A,B) ) { std::cout<<"dimensions do not match. \n Exiting. "<<std::endl; exit(0); } VrArrayPtrCF32 C = vec_copy(VR_GET_NDIMS_CF32(A),A); if(!zeroCheck){ for (int i = 0; i < getNumElem(VR_GET_DIMS_CF32(A),VR_GET_NDIMS_CF32(A)); i++) { VR_GET_DATA_CF32(C)[i] /= VR_GET_DATA_CF32(B)[i]; } }else { for (int i = 0; i < getNumElem(VR_GET_DIMS_CF32(A),VR_GET_NDIMS_CF32(A)); i++) { if (VR_GET_DATA_CF32(B)[i]==0) { std::cout<<"divide by zero. \n Exiting"<<std::endl; exit(0); } VR_GET_DATA_CF32(C)[i] /= VR_GET_DATA_CF32(B)[i]; } } return C; }
VrArrayPtrCF64 BlasComplexDouble::scal_div( VrArrayPtrCF64 A, double complex scal){ double complex * data, * out; VrArrayPtrCF64 B= vec_copy(VR_GET_NDIMS_CF64(A), A); data=(double complex*)VR_GET_DATA_CF64(A); out= (double complex*)VR_GET_DATA_CF64(B); for(int i=0;i<getNumElem(VR_GET_DIMS_CF64(A),VR_GET_NDIMS_CF64(A));i++){ out[i]=data[i]/scal; //out[2*i+1]=data[2*i+1]/scal[1]; } return B; }
VrArrayPtrCF32 BlasComplexSingle::scal_div( VrArrayPtrCF32 A, float complex scal){ float complex * data, * out; VrArrayPtrCF32 B= vec_copy(VR_GET_NDIMS_CF32(A), A); data=(float complex *)VR_GET_DATA_CF32(A); out= (float complex *)VR_GET_DATA_CF32(B); for(int i=0;i<getNumElem(VR_GET_DIMS_CF32(A),VR_GET_NDIMS_CF32(A));i++){ // out[2*i]=data[i]/scal[0]; // out[2*i+1]=data[2*i+1]/scal[1]; VR_GET_DATA_CF32(B)[i]= VR_GET_DATA_CF32(A)[i]/scal; //mexPrintf("%f %f",creal(out[i]),cimag(out[i])); } return B; }
void mat_setComplexDataCF32(PyArrayObject* arr, VrArrayPtrCF32 B){ int numel = getNumElem(VR_GET_DIMS_CF64(B),VR_GET_NDIMS_F64(B)); memcpy(PyArray_DATA(arr),B.data,sizeof(float complex)*numel); }