MATLAB 匹配 columns/tables

MATLAB matching columns/tables

我有两个 table:

Table 1 有两列,名为 WP_1 和 WP_2。

Table 2 有三个列,分别称为 WP1、WP2 和 WC。

对于 WP_1 和 WP_2 的每一对(行),我想检查它们是否在 WP1 和 WP2 的任何对(行)内。

如果它们在某一对 WP1 和 WP2 中,我想获取该特定对的 WC 的值(0 或 1)并将其打印到 table1 中的新列同一行 --> table1.WC

如果一对 WP_1 和 WP_2 不适合任何一对 WP1 和 WP2 我想在 table1.WC 的特定行中打印值“2”。

这是我希望它看起来像的示例:

what table1.Wc should look like after running the script

解释:

第 1 行中的

WP_1 和 WP_2 是 [0,0] 并且适合第 1 行中的 WP1 和 WP2 [0,145] --> 因此 table 1 中的 WC行等于 table2

中的 WC 第 2 行中的

WP_1 和 WP_2 是 [0,5] 并且适合第 1 行中的 WP1 和 WP2 [0,145] --> 因此 table 中的 WC 1 为此行等于 table2 中的 WC ....

第 4 行中的

WP_1 和 WP_2 是 [115,219] 并且不适合任何行中的任何一对 WP1 和 WP2 --> 因此 table 1 中的 WC该行是 2

WP_1 和第 5 行的 WP_2 是 [219,262] 并且适合第 3 行的 WP1 和 WP2 [169,1693] --> 因此 table 1 中的 WC行等于 table2

中的 WC

到目前为止我的代码:

for n = 1:height(table1)
    for m = 1:height(table2)
    if table1.WP_1(n) >= table2.WP1(m) &...
        table1.WP_2(n) <= table2.WP2(m)
        table1.WC(n) = table2.WC(m);
    else table1.WC(n) = 2;
    end
    end
end

这是一个简单的暴力破解方法,它使用 find 获取第一个匹配项的索引,其中行中的值在第二个 table 的范围内。如果 table2.WP2(n) == table2.WP1(n+1) 总是,可以使用一些快捷方式。

% Preallocate the output as not found
table1.WC = ones(length(table1.WP_1),1) * 2;
for i = 1:length(table1.WP_1)
    idx = find(and(table1.WP_1(i) >= table2.WP1, table1.WP_2(i) <= table2.WP2), 1, 'first');
    if ~isempty(idx)
        table1.WC(i) = table2.WC(idx);
    end
end

您也可以将 and(...,...) 替换为 & 以使其更短。我喜欢 and.

的可读性