【发布时间】:2019-09-17 21:24:18
【问题描述】:
我正在做一个项目,但在分隔值时遇到了问题。
说明:我有一个包含 X 列和 X 行的矩阵。 通常,这是一个矩阵示例,其中列是网络。
一个=
1 2 2 1
2 3 5 12
0 4 6 13
0 5 7 14
0 6 8 15
0 0 9 16
0 0 0 17
0 0 0 18
0 0 0 19
0 0 0 20
0 0 0 21
0 0 0 22
每个网络都有许多车辆,有时两个或三个网络有公共车辆。
我的问题是:如何根据以下规则将它们分成不同的组。
- 如果两个网络具有共同的价值,请将它们分成两组,
- 如果两个网络没有共同的值,请将它们重新组合为一组,
- 例如,如果一个网络与另一个网络没有共同价值,则将其添加到第 1 组而不是第 2 组(根据规则 2)。 如果一个网络与另一个网络具有共同值,则将其放置在不包含任何具有共同值的网络的第一组中(根据规则 1)。
- 我接受有关第一条规则的答案,但目标是拥有平衡的群体。
我尝试了很多方法来解决这个问题。
这段代码可以让我找到每列之间的共同值:
lastColumn = nbNetworks_5; % = 4 in my example
for i = 1 : lastColumn
for columnIndex = 1 : lastColumn
if lastColumn == 1
% do nothing.
elseif columnIndex == lastColumn
% do nothing.
else
[CommonValue,posInCln1,posInCln2] = intersect(a(:,columnIndex), a(:, lastColumn))
% If there is a common value
if CommonValue ~= 0
regroup = false;
else % If there is no common value
regroup = true;
end
end
end
% Decrease the max number of columns.
% We start from the end to get to the beginning.
lastColumn = lastColumn - 1
end
这就是我的代码所做的:
我将第一列与最后一列进行比较,然后将第二列与最后一列进行比较,然后将第三列与最后一列进行比较。 然后我向后移动一列..等
我不知道如何分离和放置这些网络..
这就是我想要得到的最终结果:
group1 有 network1,
group2 有 network2 和 network4,
group3 有 network3。
创建组数:3
为了做到这一点:
network1在group1中,--Intersect with all networks
network2在group2中,--与Network3相交
network3 正在 group3 中,
network4 进入 group2。
感谢您花时间解决我的问题!
卡安
【问题讨论】:
-
您说“我有一个包含 X 列和 X 行的矩阵”,它表示一个方阵,但在您的示例中它不是方阵。错字?如果将组定义为预期输出中的组,我认为显示您在此过程中做出的“决定”会很有帮助。乍一看,网络 1-3 都共享值
2,所以应该归为一组,不是吗? -
是的,对不起,它是 X 列和 Y 行。不,它们必须分开而不是分组。
标签: matlab