我有一个类型为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只接受字符串的单元格数组。还有另一种方法吗?
答案 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
请注意,这假设单元格数组中的每个条目只包含一个数字。