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

时间:2015-03-07 13:05:28

标签: matlab printf libsvm

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

所以这是我不明白的例子:

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是双倍的。

1 个答案:

答案 0 :(得分:1)

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

[256;uint8(1)]

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

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