我正在尝试创建一个包含 n 行和 7 列的新矩阵,但我的代码只输出第一列。
%sample values
table_a = [161.0972 11.0000 14.0000 1.0000 0 0 0;
163.0401 9.0000 8.0000 3.0000 0 0 0;
163.0765 10.0000 12.0000 2.0000 0 0 0;
163.1129 11.0000 16.0000 1.0000 0 0 0;
165.0194 8.0000 6.0000 4.0000 0 0 0;
165.0558 9.0000 10.0000 3.0000 0 0 0;
165.0922 10.0000 14.0000 2.0000 0 0 0]
table_b = [163.0401 9.0000 8.0000 3.0000 0 0 0;
163.0765 10.0000 12.0000 2.0000 0 0 0;
165.0558 9.0000 10.0000 3.0000 0 0 0;
165.0922 10.0000 14.0000 2.0000 0 0 0;
167.0350 8.0000 8.0000 4.0000 0 0 0;
167.0714 9.0000 12.0000 3.0000 0 0 0;
169.0143 7.0000 6.0000 5.0000 0 0 0]
table_c = table_a(~ismember(table_a(:, 1:7), table_b(:, 1:7)));
这就是我的结果:
table_c =
163.0401
163.0765
165.0922
这是我期望的结果:
table_c =
163.0401 9.0000 8.0000 3.0000 0 0 0
163.0765 10.0000 12.0000 2.0000 0 0 0
165.0922 10.0000 14.0000 2.0000 0 0 0
您的代码当前执行以下操作:
filter = ~ismember(table_a(:, 1:7), table_b(:, 1:7));
table_c = table_a(filter);
这将选择具有filter(x) = true
的所有table_a(x)
。
您希望选择满足条件的table_a
行,但选择这些行的所有列。 为此,您必须告诉 Matlab 选择这些行以及所有table_a
列
table_c = table_a(filter, :);
或者在一行中,
table_c = table_a(~ismember(table_a(:, 1:7), table_b(:, 1:7)), :);
为了澄清,Matlab 将其 2D 数组存储为列主数组。带矩阵
A = [0, 1, 2;
3, 4, 5;
6, 7, 8];
A(i)
选择列主序数组中的第i
个元素,因此A(4)
会给你1
.A(i, j)
选择矩阵的第i
行和第j
列。