将3d数组写入具有不同顺序的文件中
Writing 3d array into a file with different order
我有一个元素(x,y,z)的3d数组,它不在内存中,因为它的大小可能大于4GB。在每个循环中,我只能得到一个(x,z)的2D数组。由于这个限制,
我可以使用轻松地将它们保存到有序的文件中(x,z,y)
for (int iz=0;iz < nz; iz++)
for (int ix=0;ix < nx; ix++)
fwrite( (unsigned int *)(data+ix+iz*nx), element_size, 1, fp);
与相同
fwrite( (unsigned int *)(data), element_size, nx*nz, fp);
但是对于一个有序的文件(x,y,z),我必须为每个iy 这样做
for (int iz=0;iz < nz; iz++) {
fseek(fp,(iy*nx+iz*nx*ny)*element_size,SEEK_SET);
fwrite( (unsigned int *)(data+iz*nx), element_size, nx, fp);
}
然而,这真的很慢。在VC++中有更好的方法吗?
C/C++将按x组织的数组作为最大的连续切片,因此data[7]包含data[7][0-YMAX][0-ZMAX]的每个值都是一个2d单元,类似地,data[7][3][0-ZMAX]是下一个1d单元
那么data和element_size的定义是什么呢?
当您编写数组的子集时,它将具有Z的连续元素,并且这些Z切片中的每一个都将具有常数Y。如果您使用多个连续的Z值集进行I/O,则将具有连续Y的切片。
所以我不明白:
我可以使用…轻松地将它们保存到顺序(x,z,y)的文件中。。。
我可能误解了,但我不认为代码能做到这一点。我认为它写x,y,z元素
相关文章:
- CMake-按正确顺序将项目与C运行时对象文件链接
- 遍历顺序由 std::文件系统directory_iterator给出
- 如何在C++中反转文本文件中字符的顺序?
- 确实可以提高directory_iterator在Windows上按字母顺序访问文件和文件夹
- 如何在 C++ 中将从文本文件中读取的元素推送和弹出到数组中,并按 Revserse 顺序输出堆栈?
- C++:当顺序真正重要时,如何保证在项目中包含头文件的顺序
- 如何从输入的文本文件中按姓氏字母顺序对图表进行排序?
- C++ 以相反的顺序输出文本文件
- 如何从OpenCV中的目录中按顺序读取文件并使用它进行处理?
- C++ 从文件中获取数据时使用 strcpy 和 strcmp 按字母顺序对数组进行排序?
- 从文件中读取并按字母顺序排序
- 生成文件似乎以错误的顺序编译文件
- 使用 boost::filesystem 迭代目录时可以更改文件的顺序吗?
- 使用相同的文件对象按顺序写入和读取文件
- 如何使用C 扭转输入文件的顺序
- 从顺序文件填充二维数组
- 如何显示顺序文件的内容
- 在数组中使用常量字符 * 来读取顺序文件
- 文件处理:匹配顺序文件
- 在 c++ 中使用多个内核处理大型顺序文件