我有一个矩阵A=(n,m)
,我需要一一扫描它的列,如果一列元素的总和大于阈值,则将该列放入一个新矩阵B=(n,?)
中。
A=[1 2 3
3 1 1
4 2 8]
threshold=6
结果:
B=[1 3
3 1
4 8]
显然,我不知道 中有多少列B
,因此在第一个循环中,我检查列中元素的总和,然后如果该值大于阈值,我重复循环以将列附加到B
arealloc
中。
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
如果总和小于阈值,是否有一种方法可以自动添加元素并“删除”它们?换句话说,我想避免最后一个循环。