【问题标题】:Matlab Coder/Code Generation -- Array Size MismatchMatlab 编码器/代码生成——数组大小不匹配
【发布时间】:2018-02-05 05:14:27
【问题描述】:

我有以下功能代码(不是我自己的),我正在尝试生成 C++ 代码。

exampleData = double(dataRight(:,2)) < (pointsRight(1,2) + objLength + 0.101);

但是,表达式的右侧失败了,原因是小于号的左侧和右侧之间的大小不匹配。

Size mismatch (size [:? x 1] ~= size [0 x 0]).

但是,matlab 的网站说,在这种情况下,不匹配大小是the typical use case。此外,Matlab Coder 没有特别的异常或奇怪之处,所以我有点迷茫为什么会收到这个错误。

【问题讨论】:

  • 你能在pointsRight 上分享一个转储吗?你真的试过这个吗?据我所知,大小不匹配错误是当您想要访问不存在的行列时..
  • [0.051759680404457,0.01,0.0784]。代码在编码器尝试转换之外运行良好。此外,test = (pointsRight(1,2) + objLength + 0.101) 运行良好。具体是&lt;的引入导致了错误。
  • 啊我明白了.. 所以基本上问题是(pointsRight(1,2) + objLength + 0.101) 标量(只有一个元素),而double(dataRight(:,2)) 可能有多个元素(多行)..
  • 我不确定我是否理解。这是特定于编码器的限制吗? A = [5,4,3]; B= A &gt; 4 在编码器之外工作。它产生 [1,0,0]。
  • 嗯,我明白你的意思。这确实很奇怪。我认为这是 C++ 代码生成的限制。

标签: matlab


【解决方案1】:

长话短说:您必须自己实现一个 c 风格的解决方法。我相信问题引起的原因是上面的数组的无限大小。我用 size(array) 和 for 循环解决了这个问题。

这是问题代码:

dataRight = dataRight(double(dataRight(:,2))>pointsRight(1,2)+0.099 & double(dataRight(:,2))<pointsRight(1,2)+objLength + 0.101,:);

这是 coder 接受的代码:

[widthDataRight,heightDataRight]= size(dataRight)
tempDataRight = zeros(widthDataRight,heightDataRight)
for i = 1:widthDataRight
     val = dataRight(i,2)
     tempDataRight = dataRight(double(val)>pointsRight(1,2)+0.099 & double(val)<pointsRight(1,2)+objLength + 0.101,:);
end

【讨论】:

    猜你喜欢
    • 2020-03-03
    • 2020-01-07
    • 2014-03-27
    • 2016-03-04
    • 2018-08-13
    • 2011-09-17
    • 2014-10-07
    • 2019-05-03
    • 1970-01-01
    相关资源
    最近更新 更多