我有一个包含向量向量的数据结构,每个向量由大约 16000000 个双精度值组成。
我现在想要对这些向量进行中值组合,也就是说,对于每个原始向量,我取位置 i 处的值,计算这些向量的中值,然后将它们存储在位置 i 处的结果向量中。
我已经有了直接的解决方案,但速度慢得令人难以置信:
vector< vector<double> > vectors; //vectors contains the datavectors
vector<double> tmp;
vector<double> result;
vector<double> tmpmedian;
double pixels = 0.0;
double matrixcount = vectors.size();
tmp = vectors.at(0);
pixels = tmp.size();
for (int i = 0; i < pixels; i++) {
for (int j = 0; j < matrixcount; j++) {
tmp = vectors.at(j);
tmpmedian.push_back(tmp.at(i));
}
result.push_back(medianOfVector(tmpmedian));
tmpmedian.clear();
}
return result;
Run Code Online (Sandbox Code Playgroud)
medianOfVector 看起来像这样:
double result = 0;
if ((vec.size() % 2) != 0) { …Run Code Online (Sandbox Code Playgroud) 我制作了一个最小的工作示例,我有一大段代码.
问题是,sizeof打印第一次调用16,这是正确的大小,而第二次调用只打印8.奇怪的是,它总是打印8,独立于结构的大小,是否只有一个值或10个值.
struct test_struct
{
int32_t val1;
int32_t val2;
int32_t val3;
int32_t val4;
};
unsigned char * StructToChar(test_struct structy)
{
unsigned char returnval[sizeof(structy)];
memcpy(returnval, &structy, sizeof(structy));
return returnval;
}
int main()
{
test_struct sendstruct = {};
unsigned char *test_array = StructToChar(sendstruct);
unsigned char returnval[sizeof(sendstruct)];
memcpy(returnval, &sendstruct, sizeof(sendstruct));
printf("%d\n", sizeof(returnval));
printf("%d\n", sizeof(test_array));
return 0;
}
Run Code Online (Sandbox Code Playgroud)