contributed by < xdennisx
>
注意書寫的格式 –jserv
跪著參考 jack81306 解除矩陣大小限制問題
getmatrix
自己給定矩陣的大小
float** getmatrix(int row,int col)
{
float **m = malloc(sizeof(float*)*row);
for(int i=0; i<row; i++) {
m[i]=malloc(sizeof(float)*col);
}
return m;
}
matrix_extend.c
的 矩陣相乘時,左矩陣的 col 要跟右矩陣的 row 相等才能做矩陣相乘
if(l_col!=r_row)
return false;
float mData[]= {1,2,3,4,5,6,7,8,9,10,11,12};
float nData[]= {1,2,3,4,5,6,7,8,9,10,11,12};
float fixData[]= {38,44,50,56,83,98,113,128,128,152,176,200,173,206,239,272};
algo->assign(&m, mData,4,3);
algo->assign(&n, nData,3,4);
algo->assign(&fixed, fixData,4,4);
這實作距離「好」還很遠,你不需要太早跪下去,快去思考和探索 –jserv
好的,謝謝老師!
解除大小限制之後,矩陣就再也不只是方陣,所以使用 sse 好像沒有這麼單純
想法:把不足最小矩陣
4*4
補滿 0,讓他可以使用 mul
參考 illusion030
的實作
thiz->row = (row % 4 == 0) ? row : row + (4 - row % 4);
thiz->col = (col % 4 == 0) ? col : col + (4 - col % 4);
for(int i=0; i<thiz->row; i++) {
for(int j=0; j<thiz->col; j++){
if (i >= row || j >= col)
PRIV(thiz)[i][j] = 0;
else
PRIV(thiz)[i][j]=data[i*col+j];
}
}