Matlab mat 到 libsvm 格式(奇怪的 fprint 行为)

Matlab mat to libsvm format (strange fprint behaviour)

我正在尝试编写自己的 mat2libsvm 格式转换器实现(我不想使用原始函数,因为它需要双垫输入,但我使用图像并具有 uint8 矩阵)。

下面是我不明白的例子:

a= zeros(2,256);
a(1,256)=1;
formatSpec = '%i:%d ';

row= a(1,:);id=find(row);fprintf(formatSpec,[id ; row(id)]);
>256:1
row= uint8(a(1,:));id=find(row);fprintf(formatSpec,[id ; row(id)]);
>255:1

为什么会截断到 255?无论如何,第一个和第二个示例中的 id 是双倍的。

在第二行中,您将 uint8 与 double 连接起来,将两者都转换为 uint8。最小示例:

[256;uint8(1)]

要解决此问题,请将 fprintf 与多个输入参数一起使用:

fprintf(formatSpec,id , row(id));