我有一个mpc
具有以下结构的结构:
num type col3 col4 ...
mpc.bus = 1 2 ... ...
2 2 ... ...
3 1 ... ...
4 3 ... ...
5 1 ... ...
10 2 ... ...
99 1 ... ...
to from col3 col4 ...
mpc.branch = 1 2 ... ...
1 3 ... ...
2 4 ... ...
10 5 ... ...
10 99 ... ...
我需要做的是: 1:重新排序 的行mpc.bus
,使得所有类型的行都1
在前,然后是2
,最后是3
。只有一个 type 元素3
,没有其他类型(4 / 5
等)。
2:进行编号(第 1 列mpc.bus
,连续,从 1 开始。
3:更改 , 的 to-from 列中的数字mpc.branch
以对应 中的新编号mpc.bus
。
4:运行模拟后,将上述步骤颠倒,以与上述相同的顺序和编号出现。
mpc.bus
使用更新很容易find
。
type_1 = find(mpc.bus(:,2) == 1);
type_2 = find(mpc.bus(:,2) == 2);
type_3 = find(mpc.bus(:,2) == 3);
mpc.bus(:,:) = mpc.bus([type1; type2; type3],:);
mpc.bus(:,1) = 1:nb % Where nb is the number of rows of mpc.bus
中的 to/from 列中mpc.branch
的数字对应于 中的第 1列中的数字mpc.bus
。
也可以更新to
,from
列上的数字mpc.branch
。
但是,我无法找到一种不混乱的方式来追溯我的脚步。我可以使用一些简单的命令更新编号吗?
作为记录:我故意不包括我的代码来重新编号 mpc.branch,因为我确信有人有一个更聪明、更简单的解决方案(这将使模拟完成后更容易重做)。
编辑:创建普通数组可能更容易(以避免使用结构):
bus = mpc.bus;
branch = mpc.branch;
编辑#2:事情的顺序:
重新排序并重新编号。
bus
和的列 (3:end)branch
已更改。(不是这个问题的一部分)恢复原始顺序和索引。
谢谢!