未定义的函数'lt'用于'cell'类型的输入参数。在使用细胞

时间:2016-01-27 14:20:48

标签: matlab cell

我的老师要求我们在MATLAB中编写一个Huffmam Coding程序,但我遇到了一个问题:

  

未定义函数'lt'用于'cell'类型的输入参数。

     

work5455错误(第49行)

这一行:

if(cell{k+1}(1)<cell{k}(1)&&cell{k}(2)==-1)

由于没有'lt',我该如何解决? 我的老师太忙了,无法接听我的电子邮件..... 这是代码(未完成),非常感谢!

fprintf('Reading data...')
data=imread('C:\Users\dell\Desktop\2.png');
data=rgb2gray(data);
data=uint8(data);
fprintf('Done!\n')

if~isa(data,'uint8'),
    error('input argument must be a uint8 vector')
end
f=repmat(0,1,256);
len=length(data);
for j=0:255
    for i=1:len
        if data(i)==j;
            f(j)=f(j)+1;
        end
    end
end

f=double(f./len);

simbols=find(f~=0);
f=f(simbols);
[f,sortindex]=sort(f)
simbols=simbols(sortindex)

len=length(simbols);
codeword=cell(1,len);
huffnode=cell(1,2*len);
for i=1:len
    cell{i}={f(i),-1,-1,-1};
end
for i=len+1:2*len-1
    cell{i}={-1,-1,-1,-1};
end

m=len
%for i=1:len
for j=1:len+i-1
    m=m-1;
    for k=1:m
        if(cell{k+1}(1)<cell{k}(1)&&cell{k}(2)==-1)
            cell{2*len}=cell{k+1};
            cell{k+1}=cell{k};
            cell{k}=cell{2*len};
        end
    end
end

1 个答案:

答案 0 :(得分:3)

单元格{k + 1}(1)的输出是1x1单元格。由于您无法将单元格与其他单元格进行比较,因此您必须使用cell2mat进行数据类型转换以获取之前的数字。使用

if(cell2mat(cell{k+1}(1))<cell2mat(cell{k}(1))&&cell2mat(cell{k}(2))==-1)

应解决您的问题 由于单元格是matlab中的内置函数,我强烈建议重命名变量。正如@AndrasDeak在评论中所述,否则您可能会在以后遇到问题。一般情况下,永远不要使用内置函数名作为变量或函数名。请注意,ij代表matlab中的虚数单位,因此也不应用作迭代变量。