You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Octave 9.2中contour函数报错:X,Y,Z需为实数值矩阵

Octave中contour函数触发类型错误的解决方法

错误详情

error: contourc: X, Y, and Z must be real numeric matrices
error: called from contourc at line 110 column 5 contour at line 146 column 14 contour at line 80 column 18 classification1 at line 19 column 3

问题场景

这段代码来自Coursera课程《Introduction to Data, Signal, and Image Analysis with MATLAB》,在Octave 9.2中运行时触发上述错误。已确认X、Y和cls均为double类型,尺寸一致为4x8,且基础contour调用可正常执行,但当前代码无法运行。

原代码

function classification1()
  load fisheriris
  pkg load statistics
  [~,~,s] = unique(species);
  figure(1);
  plot(meas(s==1 ,1), meas(s==1, 2), 'rx')
  hold on
  plot(meas(s==2 ,1), meas(s==2, 2), 'go')
  plot(meas(s==3 ,1), meas(s==3, 2), 'b*')
  xlabel('Feature 1');
  ylabel('Feature 2');
  legend('setosa', 'versicolor', 'virginica');
  [X,Y] = meshgrid(4:.01:8, 2:.01:4.5);
  cls = my_iris_classifier([X(:), Y(:)]);
  cls = reshape(cls, size(X));
  contour(X, Y, cls==1,[1,1], 'r--');
  contour(X, Y, cls==2, [1, 1], 'g--');
  contour(X, Y, cls==3, [1, 1], 'b--');

endfunction

function class = my_iris_classifier(feat)
    class = zeros(size(feat,1),1);
    for i = 1:size(feat,1);
      if feat(i,1) > 6
        class(i) = 3;
      elseif feat(i,2) > 3
        class(i) = 1;
      else
        class(i) = 2;
      endif
    endfor

endfunction

问题原因

Octave的contour函数对输入参数类型校验比MATLAB更严格:cls==1这类比较操作返回的是逻辑布尔矩阵,而非contour要求的实数值矩阵——即使逻辑值在数值上等价于1和0,Octave仍会判定类型不匹配。

解决方法

将逻辑矩阵显式转换为数值矩阵即可,两种可行方式:

方式1:使用强制类型转换操作

在比较表达式后添加+0或*1,将布尔值转为数值:

contour(X, Y, cls==1 + 0,[1,1], 'r--');
contour(X, Y, cls==2 + 0, [1, 1], 'g--');
contour(X, Y, cls==3 + 0, [1, 1], 'b--');

方式2:使用double()函数显式转换

直接调用double()将逻辑矩阵转为double类型的数值矩阵:

contour(X, Y, double(cls==1),[1,1], 'r--');
contour(X, Y, double(cls==2), [1, 1], 'g--');
contour(X, Y, double(cls==3), [1, 1], 'b--');

修改后,contour函数就能识别Z参数为合法的实数值矩阵,代码即可正常运行。

内容的提问来源于stack exchange,提问作者Edwin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 04:25:18