您好我想得到一些帮助:
我试图使可读的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?感谢灯光!
答案 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