使用ismember表示数值

时间:2014-05-16 13:13:21

标签: matlab

我有一个类型为double的4554 x 1向量,名为company_info,ind_vec。我还有另一个25 x 1向量,它是一个名为groups.industy_labels的类型的单元格数组。

groups.industy_labels包含一个数字代码列表。 company_info,ind_vec包含相同的数字代码。

我打算在下面做,我使用ismember返回groups.industy_labels中每个数字代码的索引,然后对另一个向公司_info,ind_vec,即另一个4554 x 1向量的向量进行求和。

[~, index_sub]              = ismember(company_info.ind_vec, groups.industy_labels);
groups.industy_exps(:, 1)   = accumarray(index_sub, pwgt , [], @sum, 0);

然而,Matlab告诉我,ismember只接受字符串的单元格数组。还有另一种方法吗?

1 个答案:

答案 0 :(得分:1)

实际上错误消息有点欺骗性,因为可以使用ismember来表示数值:

x=[1 3]
y=[1 2]   
ismember(x,y) %This will work

您也可以将它用于单元格数组,但仅用于字符串:

x=[{'a'},{'c'}]
y=[{'a'},{'b'}]
ismember(x,y) %This will work

x=[{1},{3}]
y=[{1},{2}]
ismember(x,y) %This will fail

因此,在您的情况下,您可能希望在2个数字向量上使用它,而不是1个数字向量和1个单元格数组:

x=[1,2] %Numeric vector
y=[{1},{2}] %Cell array

y_numeric = [y{:}] %Made into a numeric vector

ismember(x,y_numeric) %This will work

请注意,这假设单元格数组中的每个条目只包含一个数字。