bsxarg.c

来自「bsxfun, 一個matlab中十分常用的函數. 可以快速地對matrix進行」· C语言 代码 · 共 605 行 · 第 1/2 页

C
605
字号
    {        Cpr = mxGetData(plhs[0]);        Cpi = mxGetImagData(plhs[0]);        Apr = mxGetData(prhs[0]);        Api = mxGetImagData(prhs[0]);                switch( classid )        {        case mxDOUBLE_CLASS:        case mxINT64_CLASS:        case mxUINT64_CLASS:            expand_64bits(Cpr, Cpi, Apr, Api, complexity);            break;                    case mxSINGLE_CLASS:        case mxINT32_CLASS:        case mxUINT32_CLASS:            expand_32bits(Cpr, Cpi, Apr, Api, complexity);            break;                    case mxCHAR_CLASS:        case mxINT16_CLASS:        case mxUINT16_CLASS:            expand_16bits(Cpr, Cpi, Apr, Api, complexity);            break;                    case mxLOGICAL_CLASS:        case mxINT8_CLASS:        case mxUINT8_CLASS:            expand_8bits(Cpr, Cpi, Apr, Api, complexity);            break;        }    }    if( nlhs < 2 ) return;        classid = mxGetClassID(prhs[1]);    complexity = mxIsComplex(prhs[1]) ? mxCOMPLEX : mxREAL;    plhs[1] = mxCreateNumericArray(Cndim, Cdims, classid, complexity);        if( mxGetNumberOfElements(plhs[1]) )    {        Cpr = mxGetData(plhs[1]);        Cpi = mxGetImagData(plhs[1]);        Apr = mxGetData(prhs[1]);        Api = mxGetImagData(prhs[1]);                A1 = B1;        A2 = B2;        A3 = B3;        A4 = B4;        A5 = B5;        A6 = B6;        A7 = B7;        A8 = B8;        A9 = B9;        A10 = B10;        A11 = B11;        A12 = B12;                switch( classid )        {        case mxDOUBLE_CLASS:        case mxINT64_CLASS:        case mxUINT64_CLASS:            expand_64bits(Cpr, Cpi, Apr, Api, complexity);            break;                    case mxSINGLE_CLASS:        case mxINT32_CLASS:        case mxUINT32_CLASS:            expand_32bits(Cpr, Cpi, Apr, Api, complexity);            break;                    case mxCHAR_CLASS:        case mxINT16_CLASS:        case mxUINT16_CLASS:            expand_16bits(Cpr, Cpi, Apr, Api, complexity);            break;                    case mxLOGICAL_CLASS:        case mxINT8_CLASS:        case mxUINT8_CLASS:            expand_8bits(Cpr, Cpi, Apr, Api, complexity);            break;        }    }}//-----------------------------------------------------------------------------//// Expansion function for 64-bit classes////-----------------------------------------------------------------------------void expand_64bits(void *cpr, void *cpi, void *apr, void *api, mxComplexity complexity){    bit64 *Cpr = (bit64 *) cpr;    bit64 *Cpi = (bit64 *) cpi;    bit64 *Apr = (bit64 *) apr;    bit64 *Api = (bit64 *) api;        if( complexity == mxCOMPLEX )    {        for( i12=0; i12<k12; i12++ )        for( i11=0; i11<k11; i11++ )        for( i10=0; i10<k10; i10++ )        for( i9=0; i9<k9; i9++ )        for( i8=0; i8<k8; i8++ )        for( i7=0; i7<k7; i7++ )        for( i6=0; i6<k6; i6++ )        for( i5=0; i5<k5; i5++ )        for( i4=0; i4<k4; i4++ )        for( i3=0; i3<k3; i3++ )        for( i2=0; i2<k2; i2++ )        for( i1=0; i1<k1; i1++ )        {            *Cpr++ = AX(Apr,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12);            *Cpi++ = AX(Api,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12);        }    }    else    {        for( i12=0; i12<k12; i12++ )        for( i11=0; i11<k11; i11++ )        for( i10=0; i10<k10; i10++ )        for( i9=0; i9<k9; i9++ )        for( i8=0; i8<k8; i8++ )        for( i7=0; i7<k7; i7++ )        for( i6=0; i6<k6; i6++ )        for( i5=0; i5<k5; i5++ )        for( i4=0; i4<k4; i4++ )        for( i3=0; i3<k3; i3++ )        for( i2=0; i2<k2; i2++ )        for( i1=0; i1<k1; i1++ )        {            *Cpr++ = AX(Apr,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12);        }    }}//-----------------------------------------------------------------------------//// Expansion function for 32-bit classes////-----------------------------------------------------------------------------void expand_32bits(void *cpr, void *cpi, void *apr, void *api, mxComplexity complexity){    bit32 *Cpr = (bit32 *) cpr;    bit32 *Cpi = (bit32 *) cpi;    bit32 *Apr = (bit32 *) apr;    bit32 *Api = (bit32 *) api;        if( complexity == mxCOMPLEX )    {        for( i12=0; i12<k12; i12++ )        for( i11=0; i11<k11; i11++ )        for( i10=0; i10<k10; i10++ )        for( i9=0; i9<k9; i9++ )        for( i8=0; i8<k8; i8++ )        for( i7=0; i7<k7; i7++ )        for( i6=0; i6<k6; i6++ )        for( i5=0; i5<k5; i5++ )        for( i4=0; i4<k4; i4++ )        for( i3=0; i3<k3; i3++ )        for( i2=0; i2<k2; i2++ )        for( i1=0; i1<k1; i1++ )        {            *Cpr++ = AX(Apr,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12);            *Cpi++ = AX(Api,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12);        }    }    else    {        for( i12=0; i12<k12; i12++ )        for( i11=0; i11<k11; i11++ )        for( i10=0; i10<k10; i10++ )        for( i9=0; i9<k9; i9++ )        for( i8=0; i8<k8; i8++ )        for( i7=0; i7<k7; i7++ )        for( i6=0; i6<k6; i6++ )        for( i5=0; i5<k5; i5++ )        for( i4=0; i4<k4; i4++ )        for( i3=0; i3<k3; i3++ )        for( i2=0; i2<k2; i2++ )        for( i1=0; i1<k1; i1++ )        {            *Cpr++ = AX(Apr,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12);        }    }}//-----------------------------------------------------------------------------//// Expansion function for 16-bit classes////-----------------------------------------------------------------------------void expand_16bits(void *cpr, void *cpi, void *apr, void *api, mxComplexity complexity){    bit16 *Cpr = (bit16 *) cpr;    bit16 *Cpi = (bit16 *) cpi;    bit16 *Apr = (bit16 *) apr;    bit16 *Api = (bit16 *) api;        if( complexity == mxCOMPLEX )    {        for( i12=0; i12<k12; i12++ )        for( i11=0; i11<k11; i11++ )        for( i10=0; i10<k10; i10++ )        for( i9=0; i9<k9; i9++ )        for( i8=0; i8<k8; i8++ )        for( i7=0; i7<k7; i7++ )        for( i6=0; i6<k6; i6++ )        for( i5=0; i5<k5; i5++ )        for( i4=0; i4<k4; i4++ )        for( i3=0; i3<k3; i3++ )        for( i2=0; i2<k2; i2++ )        for( i1=0; i1<k1; i1++ )        {            *Cpr++ = AX(Apr,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12);            *Cpi++ = AX(Api,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12);        }    }    else    {        for( i12=0; i12<k12; i12++ )        for( i11=0; i11<k11; i11++ )        for( i10=0; i10<k10; i10++ )        for( i9=0; i9<k9; i9++ )        for( i8=0; i8<k8; i8++ )        for( i7=0; i7<k7; i7++ )        for( i6=0; i6<k6; i6++ )        for( i5=0; i5<k5; i5++ )        for( i4=0; i4<k4; i4++ )        for( i3=0; i3<k3; i3++ )        for( i2=0; i2<k2; i2++ )        for( i1=0; i1<k1; i1++ )        {            *Cpr++ = AX(Apr,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12);        }    }}//-----------------------------------------------------------------------------//// Expansion function for 8-bit classes////-----------------------------------------------------------------------------void expand_8bits(void *cpr, void *cpi, void *apr, void *api, mxComplexity complexity){    bit8 *Cpr = (bit8 *) cpr;    bit8 *Cpi = (bit8 *) cpi;    bit8 *Apr = (bit8 *) apr;    bit8 *Api = (bit8 *) api;        if( complexity == mxCOMPLEX )    {        for( i12=0; i12<k12; i12++ )        for( i11=0; i11<k11; i11++ )        for( i10=0; i10<k10; i10++ )        for( i9=0; i9<k9; i9++ )        for( i8=0; i8<k8; i8++ )        for( i7=0; i7<k7; i7++ )        for( i6=0; i6<k6; i6++ )        for( i5=0; i5<k5; i5++ )        for( i4=0; i4<k4; i4++ )        for( i3=0; i3<k3; i3++ )        for( i2=0; i2<k2; i2++ )        for( i1=0; i1<k1; i1++ )        {            *Cpr++ = AX(Apr,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12);            *Cpi++ = AX(Api,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12);        }    }    else    {        for( i12=0; i12<k12; i12++ )        for( i11=0; i11<k11; i11++ )        for( i10=0; i10<k10; i10++ )        for( i9=0; i9<k9; i9++ )        for( i8=0; i8<k8; i8++ )        for( i7=0; i7<k7; i7++ )        for( i6=0; i6<k6; i6++ )        for( i5=0; i5<k5; i5++ )        for( i4=0; i4<k4; i4++ )        for( i3=0; i3<k3; i3++ )        for( i2=0; i2<k2; i2++ )        for( i1=0; i1<k1; i1++ )        {            *Cpr++ = AX(Apr,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12);        }    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?