ismember 用于 MATLAB 中的字符串矩阵单元元素
ismember 检查元胞数组或矩阵元素。我们如何一起检查字符串数字元素?请参见下文:
cell1 = {'netincome' [1] ; 'equity' [2] } ;
cell2 = { 'cogs' [2222] [1] ; 'equity' [3501] [2] ;
'equity' [3333] [1] ; 'netincome' [1751] [1] } ;
这失败了 ->ismember(cell1(:,[1 2]), cell2(:,[1 3]) % 我知道为什么失败。
有没有办法匹配 2 中的字符串元素和数字元素细胞?我尝试独立使用 ismember (使用了 cell2mat 函数),但仍然无法找到正确的答案。
[1751 ; 3501] ; OR 'netincome' [1751] [1] ; 'equity' [3501] [2]
ismember checks for cell-array or matrix elements. How do we check for string-numeric elements together? Please see below:
cell1 = {'netincome' [1] ; 'equity' [2] } ;
cell2 = { 'cogs' [2222] [1] ; 'equity' [3501] [2] ;
'equity' [3333] [1] ; 'netincome' [1751] [1] } ;
This fails ->ismember(cell1(:,[1 2]), cell2(:,[1 3]) % I know why it fails.
Is there any way to match string elements and numeric elements from 2 cells? I tried using ismember independently (cell2mat func was used) but still can't hit the right answer. The desired answer is:
[1751 ; 3501] ; OR 'netincome' [1751] [1] ; 'equity' [3501] [2]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我认为对于这种情况没有任何好的内置解决方案。我目前能想到的最好的方法是使用函数 ISEQUAL 进行比较:
结果将是 N×1 向量
index
中的一组匹配索引,其中 N 是cell1
中的行数。如果cell1
中的一行无法与cell2
中任何一行的数据匹配,则index
对应的条目将为0。index
中的匹配索引将保留cell1
中数据的原始顺序。此外,此代码会忽略cell2
中的多个匹配项,仅返回找到的第一个匹配项的索引并中断内部循环(这可能会减少所需的迭代次数)。现在,您可以索引
cell2
以获取与cell1
中的内容相对应的数据:I don't think there's any good built-in solution for this situation. The best one I can think up at the moment is to create two nested loops to compare all the rows of each cell array, using the function ISEQUAL to do the comparisons:
The result will be a set of match indices in the N-by-1 vector
index
, where N is the number of rows incell1
. If a row ofcell1
can't be matched to the data in any row ofcell2
, then the corresponding entry ofindex
will be 0. Indices of matches inindex
will preserve the original order of the data incell1
. Also, this code ignores multiple matches incell2
, returning only the index of the first match found and breaking the inner loop (which will potentially reduce the number of iterations needed).Now you can index into
cell2
to get the data corresponding to what's incell1
: