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));
我正在尝试编写自己的 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));