Matlab:在二进制文件中保存int8向量

时间:2016-08-23 12:00:15

标签: matlab binary integer byte

您好我想得到一些帮助:

我试图使可读的int8向量(实际上是通过MySQL数据库从已经是二进制的.mat文件中检索出来的。)

我想做类似的事情:

fileId = fopen(fileName, 'w');
fwrite(fileId, vector,'uint8');
fclose(fileId);
load(fileName);

但Matlab会抛出错误"文件可能已损坏"。

这背后的想法是使用中央数据库存储我们的.mat文件。

vector是[ 306624x1 int8],看起来像:

vector = [77; 65; 84 ...

感谢您的帮助

修改

我继续这项任务,@ Rotem给我的解决方案完美无缺。 我有数以百万计的.mat文件,从硬盘驱动器中读取的速度非常慢。

所以,我已经改为数据库,为了检索这些文件我做了mysql查询(这要快得多)。

我将每个文件恢复为字节向量,然后在本地硬盘驱动器中写入并使用load()重新加载。

@Rotem对此有所帮助,但现在我正面临太空圆盘的问题。 有一种方法可以直接执行此转换而无需通过fwrite - load?

感谢灯光!

1 个答案:

答案 0 :(得分:1)

我不能说我有背后的动机......

检查以下代码示例:

data %>% summary_tags(tags,stats)

%Create sample mat file with saved matrix A. A = magic(3); save('A.mat', 'A'); clear A; %Note: A is cleared from Matlab Workspace. %Read A.mat to uint8 vector: f = fopen('A.mat', 'r'); vector = fread(f, '*uint8'); %Use '*uint8' to keep vector in class uint8. fclose(f); %Write vector to B.mat as binary file: f = fopen('B.mat', 'w'); fwrite(f, vector); fclose(f); %Load B.mat as mat file: load('B.mat'); %Display A matrix (loaded from B.mat). A

A =
8 1 6
3 5 7