【问题标题】:Matlab - Why ismember does not work? [closed]Matlab - 为什么 ismember 不起作用? [关闭]
【发布时间】:2014-12-01 11:20:40
【问题描述】:

我有一个具有不同且冗余的公司名称的单元向量。以及有趣的公司名单。我试图弄清楚,有趣的公司出现在大矩阵的哪个位置。我对所有的外表都感兴趣。 我的代码由于某种原因不起作用。 ismember 总是返回错误。

Comps = Data0(:,7);
for i = 1: length(relCompQ)
    comp = relCompQ{i,1};
    c(:,i) = find(ismember(Comps,comp));
end

错误:

使用单元格/ismember 时出错>cellismemberR2012a(第 192 行)输入 A 的 类单元格和类 char 的输入 B 必须是字符串的单元格数组, 除非一个是字符串。

单元格/ismember 中的错误(第 56 行)

[varargout{1:max(1,nargout)}] = cellismemberR2012a(A,B);

这两个向量都有如下值:“Nike”、“Adidas”、“BMW”等。

【问题讨论】:

  • 你得到什么错误?
  • 定义你的变量是什么;最好包括一个小例子。你发的代码不知道是看不懂的
  • 完成:使用单元格/ismember 时出错>cellismemberR2012a(第 192 行)单元格类的输入 A 和 char 类的输入 B 必须是字符串的单元格数组,除非一个是字符串。单元格/ismember 中的错误(第 56 行)[varargout{1:max(1,nargout)}] = cellismemberR2012a(A,B);两个向量都有如下值:“耐克”、“阿迪达斯”、“宝马”等。

标签: matlab cell-array


【解决方案1】:

cell 类的输入 A 和 char 类的输入 B 必须是字符串元胞数组,除非其中一个是字符串。

这意味着单元格中的每个条目都必须是字符串,而在本例中不是。如果您的元胞数组包含数值,甚至是 矩阵,则会出现此错误。

例如,这很好(字符串元胞数组和一个字符)

ismember({'b','c'},'b');

这不是:

ismember({'b',[1 2]},'b');
ismember({'b',[]},'b');
ismember({'b',NaN},'b');

最有可能意外混入元胞数组的可能是空矩阵。在这些情况下,我总是建议使用调试工具(dbstop if error 是我们的朋友)来仔细检查到底发生了什么。您认为变量应该是或包含的内容与它确实实际上包含的内容并不总是相同的。

如果确实包含空,请参阅this question 了解如何处理它。

【讨论】:

    猜你喜欢
    • 2018-02-15
    • 2018-02-15
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多