我正在尝试编写自己的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是双倍的。
答案 0 :(得分:1)
在第二行中,您将uint8与double连接,将两者都转换为uint8。最小的例子:
[256;uint8(1)]
要解决此问题,请将fprintf
与多个输入参数一起使用:
fprintf(formatSpec,id , row(id));