桂平網(wǎng)站制作seo查詢seo優(yōu)化
背景
有項目算法使用matlab中circshift函數(shù)進行運算,這里需要將轉(zhuǎn)化為C語言,從而模擬算法運行,將算法移植到qt。
MATLAB中circshift簡單介紹
circshift是循環(huán)移位函數(shù)??梢允褂糜跀?shù)組和矩陣元素的循環(huán)移位。
當A是數(shù)組
B=circshift(A,p);如果p是正數(shù)則實現(xiàn)A從左到右的循環(huán)移位。如果p是負數(shù)則實現(xiàn)A從右到左的循環(huán)移位。
當A是矩陣
B=circshift(A,[p,0]);如果p是正數(shù)則實現(xiàn)A以行為單位,從上到下的循環(huán)移位。如果p是負數(shù)則實現(xiàn)從下到上的循環(huán)移位。
B=circshift(A,[0,p]);如果p是正數(shù)則實現(xiàn)A以列為單位,從左到右的循環(huán)移位。如果p是負數(shù)則實現(xiàn)從右到左的循環(huán)移位。
實際maltab中使用如下代碼所示,其中z為96000x1列向量
??? x4 = circshift(z,[1,0]);
測試MATLAB代碼如下
Z = [1 2 3 4 5 6]
Z = Z'
X = circshift(Z,[1,0])
運行結(jié)果如下圖所示
>> clear
>> Z = [1 2 3 4 5 6]Z =1 2 3 4 5 6>> Z = Z'Z =123456>> X = circshift(Z,[1,0])X =612345>>
結(jié)果圖片如下
?
C語言實現(xiàn)
代碼如下所示
int circshift_1_0(unsigned char *psrc, unsigned char *pdst, unsigned int len) {// unsigned char* ptr_tmp = (unsigned char*)malloc(sizeof(unsigned char) * len);// if(ptr_tmp == NULL)// {// perror("fun_name");// return -1;// }pdst[0] = psrc[len - 1];for(int i = 1; i < len; i++){pdst[i] = psrc[i - 1];}// free(ptr_tmp);// ptr_tmp = NULL;return 0;
}