【发布时间】:2014-02-27 17:49:10
【问题描述】:
如果A 和B 是具有相同列(并且顺序相同)的表(或数据集),则ismember(A(:, somecols), B(:, somecols)) 之类的表达式将生成一个布尔数组,适用于索引A ,如
A(ismember(A(:, somecols), B(:, somecols)), :)
上面的行计算为table(或dataset,取决于A 的类),由A 的行组成,这些行与B 中指定的列处的B 的某些行匹配@。
但现在假设B 正好有一行。更实际地,假设从A 中选择行的标准只是匹配B 的这一行,比如第一行。
可以这样做:
A(ismember(A(:, somecols), B(1, somecols)), :)
我对此的主要疑问是它不是“语义清晰”,因为实际上使用ismember 来测试是否相等。
如果能写的话语义上会更清晰
A(isequal(A(:, somecols), B(1, somecols)), :)
但这并不会产生预期的结果。 (具体来说,即使A(:, ...) 包含与B(1, ...) 匹配的行,它也不返回任何匹配项。)
我的问题是,什么谓词可以正确生成与问题“A 的这一行是否与somecols 处的 this 参考行匹配”的问题对应的逻辑向量?
【问题讨论】:
-
正如@MrAzzaman 下面的回答所暗示的,如果您想索引
A的行,您需要eq(==),而不是isequal。这些不是等价的。不幸的是,eq没有为表类型编写(可能与cell、struct等不支持它的原因相同)。如果这些看起来笨拙,您可以考虑为自己制作一组实用函数来简化您需要编写的代码。
标签: matlab matlab-table