【发布时间】:2015-08-26 11:32:57
【问题描述】:
我想在 MATLAB 中创建一个 txt 文件,例如2GB 大(为简单起见不是 GiB)。它可以包含任意数据。 在 Python(或 C)中,可以简单地做到这一点(Python 3.4 代码):
path = r'D:\\file.txt'
f = open(path, 'w')
f.seek(2e9 - 1)
f.write('\x00')
f.close()
这种方法(即寻找过去的文件结尾并写入单个 NUL 值)在 MATLAB R2007b 中不起作用,尽管这种方法在 MATLAB 中有效:
path = 'D:\file.txt';
f = fopen(path, 'w'); % or 'W'
fwrite(f, 0, 'uint8', 2e9 - 1);
fclose(f);
问题是使用 MATLAB 几乎比 Python 慢 17 倍。我没想到执行速度更快,但 17 倍太多了,1 分钟 17 分钟是天壤之别。
在 MATLAB 中有没有更快的方法来做到这一点?
规格:
- 操作系统:Windows
- MATLAB:R2007b
- 文件系统:FAT32
编辑:
MATLAB 中与 Python 中相同的方法不起作用,因为 fseek 返回 -1,可能它达到 EOF 并且不喜欢它。这是代码:
path = 'D:\file.txt';
f = fopen(path, 'w'); % or 'W'
fseek(f, 2e9 - 1, 'bof') ;
fwrite(f, uint8(0));
fclose(f);
【问题讨论】:
-
R2007b 太旧了,你没有考虑升级到新版本吗? MATLAB中的文件写入函数例如dlmwrite、sprintf、table、fwrite 等。很多选项需要考虑。我对 Python 不熟悉,但我怀疑在过去 7 年中,MATLAB 和 Python 的效率都有很多改进。
-
我肯定会在较新的版本中尝试它,但现在我坚持使用这个。我还读到 fwrite 是最快的方法,但你可以看到它仍然很慢。此外,python 代码仅用作“伪代码”,在 C 语言中非常相似 :)
-
你在两个代码 sn-ps 中做的事情不一样,所以这就引出了一个问题:你为什么期望得到可比较的结果?
-
正如我所提到的,fseek 方法在 Matlab 中不起作用,它以代码退出 - 1
-
@LStarling,你没有提到...
标签: matlab