行列がA=(n,m)
あり、その列を 1 つずつスキャンする必要があり、列の要素の合計がしきい値よりも大きい場合は、列を新しい行列に入れますB=(n,?)
。
A=[1 2 3
3 1 1
4 2 8]
threshold=6
そして結果として:
B=[1 3
3 1
4 8]
明らかに、 の列数がわからないB
ため、最初のループで列の要素の合計を確認し、値がしきい値よりも大きい場合は、列をB
aで追加するループを繰り返しますrealloc
。
okcol=0;
double *B = malloc(n*sizeof(double));
for (col=0;col<m;col++){
sum=0;
for (row=0;row<n;row++){
sum+=A[row+col*n];
if(sum>threshold){
B = realloc(B, (okcol+1)*n*sizeof(double));
for (row2=0;row2<n;row2++){
B [okcol*n+row2] = A[row2+col*n];
}
okcol++;
}
}
}
B
合計がしきい値未満の場合、要素を自動的に追加して「削除」する方法はありますか? つまり、最後のループは避けたいと思います。