从数学上讲,任务非常简单。我有很多维度约为40k的向量,并希望计算这些向量中选定对的Kronecker Product,然后对这些kronecker积求和。
问题是,如何高效地完成这个任务?以下代码结构使用for循环是否存在问题,或者能否达到预期效果?
下面描述的函数
kron
传递长度为vector_size
的向量A
和B
,并计算它们的kronecker积,存储在C
中,一个vector_size*vector_size
矩阵。void kron(int *A, int *B, int *C, int vector_size) {
int i,j;
for(i = 0; i < vector_size; i++) {
for (j = 0; j < vector_size; j++) {
C[i*vector_size+j] = A[i] * B[j];
}
}
return;
}
这对我来说似乎很好,如果我没有犯一些愚蠢的语法错误,肯定会产生正确的结果,但我隐约感到嵌套的for循环并不是最优的解决方案。如果有其他更好的方法,请告诉我。欢迎提供建议。
非常感谢您的耐心和任何建议。再次说明,我对C语言非常不熟悉,但在谷歌上搜索并没有为我的问题带来太多的帮助。
C[i][j]
无法编译通过。你需要像这样C[i*vector_size+j]
或者声明函数参数为int C[vector_size][]
(使用gcc重新排列)。 - Joseph QuinseyC[][vector_size]
。 - Joseph Quinsey