【发布时间】:2013-05-24 14:33:04
【问题描述】:
我有一个结构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。 3 类型只有一个元素,没有其他类型(4 / 5 等)。
2:进行编号(mpc.bus 的第 1 列,连续,从 1 开始。
3:更改mpc.branch的to-from列中的数字,以对应mpc.bus中的新编号。
4:运行模拟后,将上述步骤颠倒,以与上述相同的顺序和编号出现。
使用find 更新mpc.bus 很容易。
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
mpc.branch 中 to/from 列中的数字对应于 mpc.bus 中第 1 列中的数字。
也可以更新mpc.branch 的to、from 列上的数字。
但是,我无法找到一种简单的方式来追溯我的脚步。我可以使用一些简单的命令来更新编号吗?
郑重声明:我故意不包含用于重新编号 mpc.branch 的代码,因为我确信有人有更智能、更简单的解决方案(这将使模拟完成后更容易重做)。
编辑:创建普通数组可能更容易(避免使用结构):
bus = mpc.bus;
branch = mpc.branch;
编辑#2:事情的顺序:
重新排序和重新编号。
bus和branch的列 (3:end) 已更改。 (不是这个问题的一部分)恢复原始顺序和索引。
谢谢!
【问题讨论】:
标签: arrays matlab struct indexing